あなたのCarクラスを変更することなく、PostgresSQLCarRepositoryのような別のリポジトリに置き換えることができるという考えがあります。
リポジトリクラスを別々のライブラリに分けて、それを依存関係注入によって読み込むことができます。
もしあなたが複数のlibary dllをコンパイルすると、postgresを話す人、mssqlを話す人、XMLを話す人、あなたの車のクラスを再コンパイルすることを気にせずにあなたのコードを使うことができます。コメント
後
--editは質問がよりあるように思われる追加のコメントの後、なぜこの本当の世の中のデザインパターンはオブジェクト指向の基本的な原則に従わないように思われるのですか?
簡単な答えは、OOの基本原則に従うということです。
長い答え...
OOの基本的な考え方は、(これは、継承、ポリモーフィズムなどの大量に行かなくても、過度に単純化され)まとめてグループ化することを特定のエンティティに関するプロパティのコレクションです特定のエンティティを単一のクラスに操作するメソッドなどがあります。
GetCarCollection()メソッドは、1つの車のインスタンスには適用されません。これはリポジトリに適用されます。これは、リポジトリに複数の車の回収を依頼しているためです。しかし、Start()のようなメソッドは、その自動車のインスタンスに具体的に適用されるため、車に対するメソッドとなる可能性があります。
その上
あなたは、さらに読み取り専用かもしれない性質を持っていて、通常、その代わりに、あなたは
public class car {
private int _carId;
private string _carName;
private int speed=0;
public Car(int carId) {
this._carId=carId;
}
public int CarId {
get { return this._carId; }
}
public string CarName {
get { return this._carName; }
set { this._carName=value; }
}
public int Speed {
get { return this._speed; }
}
public void Accelerate() {
if (this._speed<91) this._speed++;
}
}
public class MsSqlCarRepository : ICarRepository {
public MsSqlCarRepository(SqlConnection conn) {.....}
IEnumerable<car> GetCarcollection(){ ................ }
}
public class XmlCarRepository : ICarRepository {
public XmlCarRepository(string FileName) {.....}
IEnumerable<car> GetCarcollection(){ ................ }
}
あなたが持っていないことがありました例があるかもしれないクラスのインスタンス自体にのみアクセスできるようにバッキングフィールドを非表示します非常にOOのように思えましたが、それは単純化されていたので、それ以上でした。オブジェクトの詳細と複雑さのレベルが増すにつれて、これが実際にどのようにOOのアプローチであるかを理解し、Cの構造とマネージャーのアプローチから乖離し始めます。
本当に私の質問ではないリポジトリのパターンが使用されていることを理解する –
あなたの質問は何ですか?リポジトリパターンを理解している場合、パターンを不可能にすると、メソッドをマージすることは意味がありません。 –
私の根本的な疑問は、本当になぜ実際の世界の例(リポジトリは私が帽子から選んだものです)は、勉強用の本などに書かれているようなことはないようです。よくしかし、上記のように、リポジトリのパターンは実際に構造体や構造体マネージャのコードを使用するよりも、実際には何もしていません。または何かここに何かを逃した。そのようなリポジトリのパターンについてはそれほど疑問ではありません。 –