この質問は、私の以前の投稿に関連しています。基本的に、DAOをエンティティに挿入したい
public class User
{
IUserDAO userDAO;
public User()
{
userDAO = IoCContainer.Resolve<IUserDAO>;
}
public User(IUserDAO userDAO)
{
this.userDAO = userDAO;
}
//Wrapped DAO methods i.e
public User Save()
{
return userDAO.Save(this);
}
}
ここで、DAO にカスタム メソッドがある場合は、基本的にそれらをエンティティ オブジェクトにラップする必要があります。したがって、IUserDAO.Register() がある場合は、それをラップするために User.Register() メソッドを作成する必要があります。
より良いのは、DAO からのメソッドが User オブジェクトに動的に割り当てられるプロキシ オブジェクトを作成することです。したがって、次のようなものがあるかもしれません:
var User = DAOProxyService.Create(new User());
User.Save();
これは、User エンティティをネットワーク上でのデータ転送に適した非常に馬鹿げたクラスとして保持できることを意味しますが、魔法のように多数の DAO メソッドを与えることもできます。
しかし、これは私の快適ゾーンから非常に外れており、これを達成するには何が必要なのだろうかと思いました。Castles Dynamic プロキシを使用できますか? また、C# コンパイラはこれに対処し、動的に追加されたメソッドについて知ることができますか?
これがナンセンスである場合は、遠慮なくお知らせください。
編集:
そのために必要なことは、コンパイル時に DAOProxyService.Create() を User オブジェクトを返すものとして何らかの形で宣言することです。これは、ジェネリックで行うことができます。
私が返したいのは User オブジェクトではなく、UserDAO メソッドが動的に追加された User オブジェクトです。このクラスはどこにも定義されていないため、コンパイラはそれをどうするかわかりません。
私が本質的に返しているのは、次のような新しいオブジェクトです: User : IUserDAO なので、必要に応じてキャストできると思います。しかし、これは面倒なようです。
私が探しているのはこれに似ているようです: Mixins