1

「ドメインオブジェクト」->「アセンブラー」->「データ転送オブジェクト」(DTO)パターンを共有ライブラリに書き込んで、プレゼンテーション層とサービスレイヤーがDTOを介して通信できるようにします。DTOでコースグレインアグリゲーションを可能にするために、共有インターフェイスを避けました。「CreateDTO」メソッドをしっかりと把握していますが、C#のアセンブラーでUpdateDomainObject(DTO dto)メソッドをどのように実装するのか疑問に思っています。コードを単純化するために、次の構造を検討しています。

public class SomeAssembler
{
public static SomeDTO CreateDTO(SomeDomainObject obj)
{
dto.Property1 = obj.Property1;
...
}
//METHOD IN QUESTION:
public static void UpdateDomainObject(SomeDTO dto, SomeDomainObject obj)
    {obj.Property1 = dto.Property1 ...}
}

メソッドにドメインオブジェクトパラメータを含める理由は、次のようなコードを許可するためです。

//Presentation Layer Code (PL signifies presentation layer type)
ContactPL : IContact //(IContact is an Entity library contract shared across layers in separate DLL)
{
#region Properties
//Note Mixed Types, so params not an option
public int Id {get;set}
public String FirstName {get;set;}
public string LastName {get;set;}
public string PhoneNumber {get;set;}
public Address address {get;set;}
#endregion

#region Methods
//METHOD IN QUESTION:
public void GetContact(int id)
{
ContactDTO dto = ContactService.GetContactbyId(id);
ContactAssembler.UpdateContact(dot, this);
}

// Other Methods...

#endregion
}

上記で「//METHODINQUESTION:」とマークされたメソッドに注意してください。私の質問、「この構造は受け入れられますか、および/またはこの方法でコードを書くことに懸念はありますか?」

私はJavaがこれらの問題を次のように扱っていることを知っています。「UpdateDomainObject」のMyAssemblerメソッドと、それがプレゼンテーション層モデルオブジェクトに含まれることが許容できるか、理想的であることを確認したいと思います。そうでない場合は、猫の皮を剥ぐためのより良い方法についてのアイデアはありますか?

Javaの例-DTOから更新するためのアセンブラーメソッド(比較のみ-C#用語で回答してください):

public static void updateCustomer(CustomerDTO dto) {
Customer target = null;
for(Customer c: Domain.customers) {
if (dto.name.equals(c.getName())) {
target = c;
break;
}
}
if (target != null) {
target.setAddress(dto.address);
target.setPhone(dto.phone);
}
}
4

1 に答える 1

1

'Update'メソッドにDTOとドメインオブジェクトの両方を含めることにより、プレゼンテーション層にDTOとドメインオブジェクトの両方を処理させることになります。

DTO、ドメインオブジェクト、または別のプレゼンテーション層固有のオブジェクトクラスなど、プレゼンテーション層に関連する種類のオブジェクトのみを処理させ、アセンブラに変換を処理させる方が簡単です。

Javaの例は、この種の変換をアセンブラーに分離する良い例です。

この種の分離の利点は、コード内の結合が減少することです。これにより、コードがより柔軟になり(つまり、変更が容易になります)、複雑さが軽減されるため、コードの保守が容易になります。

于 2013-01-07T21:08:53.390 に答える