例として、ShipmentInformationModelFactoryがあります。目的は、モデルを作成して戻すことです。TDD - 具体的な実装には、どのようにして具体的なバージョンの工場ロジックが提供されますか?
internal class ShipmentInformationModelFactory
{
private IGetCarrierServiceFactory getCarrierServiceFactory;
public ShipmentInformationModelFactory(IGetCarrierServiceFactory getCarrierServiceFactory)
{
this.getCarrierServiceFactory = getCarrierServiceFactory;
}
internal ShipmentInformation Create(ICarrierTransaction carrierTransaction, CarrierPackage carrierPackage)
{
ShipmentInformation shipmentInformation = new ShipmentInformation();
// Get the Carrier Service Model for the ID of the carrier service against the Package.
ICarrierServiceModel carrierServiceModel = this.getCarrierServiceFactory.Get(carrierPackage.CarrierServiceId);
shipmentInformation.ServiceCode = carrierServiceModel.Code;
return shipmentInformation;
}
}
次に、いくつかのスタブデータを返すだけのMockGetCarrierServiceFactoryがあります。
[TestMethod]
public void CreateShipmentInformation_ShipmentData()
{
ShipmentInformationModelFactory shipmentInformationModelFactory = new ShipmentInformationModelFactory(new MockGetCarrierServiceFactory());
ShipmentInformation shipmentInformation = shipmentInformationModelFactory.Create();
}
internal class MockGetCarrierServiceFactory : IGetCarrierServiceFactory
{
public ICarrierServiceModel Get(int carrierServiceModelID)
{
ICarrierServiceModel carrierServiceModel = Mock.Create<ICarrierServiceModel>();
Mock.Arrange(() => carrierServiceModel.Code).Returns("TestCarrier");
Mock.Arrange(() => carrierServiceModel.Description).Returns("TestDescription");
return carrierServiceModel;
}
}
これは素晴らしい作品と私はそれが非常によくSOLID原則に従うように、私が間違っているなら、私を修正すること自由に感じなさい感じます。
私の問題は、この実装の(ライブ)具体的なバージョンが付属しています。どの時点でGetCarrierServiceFactoryの具体的なバージョンをShipmentInformationModelFactoryに渡すべきですか?
デフォルトのコンストラクタを作成し、その内部に自動的に値を設定する必要がありますか?
ShipmentInformationModelFactoryオブジェクトをインスタンス化するクラスは、それをコンストラクタに渡して渡すことができましたが、ここでは依存関係を作成しました。
私はTDDとSOLIDの原則を80%理解しているように感じますが、これらの工場の作成に関しては迷っています。
興味深いことに、以前はIoCコンテナについて聞いたことがありませんでした。この問題を解決する最も一般的な方法は、IoC経由ですか? – Eritey