为了保持良好的存储库/控制反转(Repository/IoC)设计,我正在尝试找出当前问题的最佳方法。
有两个对象,即Member
和Character
。
基本上,一个成员可以拥有多个角色。很简单。
Member
{
IList<Character> Characters { get; set; }
}
There is an IMemberRepository
...
interface IMemberRepository
{
MemberCreateStatus CreateMember(string email, string password);
bool ValidateMember(string email, string password);
bool ChangePassword(string email, string password, string newPassword);
void RecoverPassword(string email);
}
这里有一个 ICharacterRepository
接口。
interface ICharacterRepository
{
Character CreateCharacter(string name);
}
那么,我的问题很简单。我在哪里添加逻辑来将
Character
添加到Member
中?我应该在IMemberRepository
中吗?对我来说,这似乎很麻烦。它似乎超出了IMemberRepository
的任务范围。我应该将其添加到ICharacterRepository
中吗?这也对我来说有点奇怪,因为给予知识违反了保持分离的原则。在这种情况下,最好的方法是什么?如果只有这一个方法,那就不是太大的问题 - 但是在两个类之间还会发生很多其他事情。如何处理两个相互关联的对象的情况符合“标准”方式?我正在使用ASP.NET MVC进行编码。
ISessionFactory
。领域对象没有ORM的概念。我正在使用nHibernate。仓储库确实使用UnitOfWork抽象来处理更改。这就是问题所在。你告诉我的方法不可能按照你告诉我的方式去做。领域对象不知道ORM是什么。他们根本没有这个概念。但是nHibernate使用代理和延迟加载。我不能够RetrieveMember
,然后自由地使用它的方法。我必须在仓储库的UnitOfWork中完成。 - Ciel