次のスタイルで記述されたコードベースの一部があります。
// IScheduledTask.cs
public interface IScheduledTask
{
string TaskName { get; set; }
int TaskPriority { get; set; }
List<IScheduledTask> Subtasks { get; set; }
// ... several more properties in this vein
}
// ScheduledTaskImpl.cs
public class ScheduledTaskImpl : IScheduledTask
{
public string TaskName { get; set; }
public int TaskPriority { get; set; }
public List<IScheduledTask> Subtasks { get; set; }
// ... several more properties in this vein,
// perhaps a constructor or two for convenience.
}
つまり、動作のない一連のプロパティのみを指定する多数のインターフェイスがあり、それぞれに自動プロパティでこれらを実装する対応する単一の実装があります。コードはかなり年長の誰か(私よりもはるかに年上)によって書かれており、このインターフェースの使用とは別に、合理的な手続き型コードです。他の誰かがこのスタイルに遭遇したり使用したりしていないか、インターフェイスなしでどこでも具象DTOを使用するだけの利点があるかどうか疑問に思っていました。
1
私がこれを行った理由の1つはCOMの互換性のためですが、ここではそれが理由ではないようです。
—
マイクがモニカをサポート
@マイク興味深い、私はCOMを使用したことがなく、ここでは使用されていません。コードのこのセクションの作成者に、COMを使用する予定か、それとも何かを使用する予定かを尋ねます。
—
2016年
私の推測では、彼は比較的近い将来にこれらのプロパティの少なくとも1つを非自動化する予定であり、このボイラープレートを最初に書き出すことは、後で手間を省くために慣れている習慣だと思います。 C#の男ではないので、私が言えることはこれだけです。
—
Ixrec
私見それは、実装ではなくインターフェイスへのコードの過度の執着と誤用です。重要な説明は、唯一の実装です。インターフェースのポイントはポリモーフィズムですが、プロパティのみのクラスは、単に異なる値を持つという意味でポリモーフィックです。振る舞い-メソッド-を使用しても、単一の実装が与えられても意味がありません。このナンセンスは私たちのコードベース全体にあり、せいぜいそれはメンテナンスを妨げます。なぜ、何を、どこに質問するのに時間がかかりすぎます。なぜ彼らはそれをしたのか、私には見えないデザイン、そして他の実装はどこにあるのですか?
—
レーダーボブ2016年