0

少し問題があります。この状況をどのように処理すればよいかよくわからないので、簡単なシナリオを説明します。お役に立てれば幸いです。

親データベース オブジェクトを親 bll オブジェクトにマップしようとしています。この親データベース オブジェクトには、子の ID への外部キーがあり、私の親 bll オブジェクトでは、子 bll オブジェクト (ID 以外のものを含む) を使用します。

だからここに私の bll オブジェクトがあります:

public class Parent
{
    public int ID { get; set; }
    public Child Child { get; set; }
}

public class Child
{
    public int ID { get; set; }
    public string FirstName { get; set; }
}

そして、これが私のマッパークラス/メソッドです:

public class ParentMapper
{
    public Parent MapFromSource(ParentDatabaseObject parentDO)
    {
        Parent parent = new Parent();
        parent.ID = parentDO.ID;
        parent.Child = ???;
        return parent;
    }
}

この場合、ParentDatabaseObject がどのように見えるかはあまり重要ではないと思います。parent.Child オブジェクトをどのようにマップすればよいか知りたいだけです。

私は次のことを検討しました:

parent.Child = new Child();
parent.Child.ID = doParent.Child.Id;
parent.Child.FirstName = doParent.Child.FirstName;

これは正しくありません。なぜなら、これを ChildMapper に入れたいという衝動に駆られたからです。これは、これを実装する 2 番目の方法につながります (別の子マッパーがあり、childMapper と呼ばれるインスタンスがあると仮定します)。

parent.Child = childMapper.MapFromSource(parentDO.Child);

しかし、ParentMapper で ChildMapper を使用することになるため、このマッピング方法を使用すると、コードが少し密結合になるような気がします。

したがって、私の質問は、この種のマッピングをどのように実装すればよいかということだと思います。この最後の方法は正しいですか、それとももっと良い方法がありますか? 最初に試したことはすでに破棄しています。

ご協力いただきありがとうございます!

(私はこの質問を投稿する前に調査を行いましたが、これは私が見つけることができる最も近いものでした: Data Mapper for Child Objectsですが、そこにある唯一の答えに本当に満足していませんでした)

4

1 に答える 1

0

それは良いことではありませんか -

parent.Child = childMapper.MapFromSource(parentDO.FoeignKeyToTheChild);  

Id でオブジェクトを取得するメソッドが必要だと思います。

編集:DataAccessマッパーがコーディングしない場合は、 Repository. Repositoryすでに DataObjects の準備ができているので、次の方法でそれを行うことができます -

親マッパー:

public class ParentMapper
{
    public Parent MapFromSource(ParentDo parentDo)
    {
        Parent parent = new Parent();
        parent.Id = parentDo.Id;
        return parent;
    }
}  

チャイルドマッパー:

public class ChildMapper
{
    public Child MapFromSource(ChildDo childDo)
    {
        Child child = new Child();
        child.Id = childDo.Id;
        child.FirstName = childDo.FirstName;

        return child;
    }
}  

リポジトリ:

public class Repository
{
    //you already have parentDo
    //you already have childDo

    public Parent GetParent()
    {
        Parent parent = parentMapper.MapFromSource(parentDo);
        parent.Child = childMapper.MapFromSource(childDo);
        return parent;
    }

    public Child GetChild()
    {
        Child child = childMapper.MapFromSource(childDo);
        return child;
    }
}  

それ以外の場合は、コードMapperにアクセスできる必要がありますDataAccess

于 2012-08-26T20:41:41.290 に答える