在我的域模型实体对象我有一个实体对象,如下所示:与辅助性
public class Group
{
public int idGroup { get; set; }
public string Description { get; set; }
}
我对这个对象存储库:
public class GroupRepository : IGroupRepository
{
public Group LoadGroup(int idGroup)
{
//imitation of SQL data reader
Group g = new Group();
g.idGroup = Convert.ToInt32(r["idTipoGrupo"]);
g.Description = Convert.ToString(r["Descricao"]);
return g;
}
}
但现在我需要得到通过我创建的存储库中的新功能从数据存储中获取有关组对象的额外信息,这里是我需要的字段:
public bool HasChildGroups { get; set; }
public int ChildGroupsCount { get; set; }
public bool HasDeals { get; set; }
public int DealsCount { get; set; }
这些属性在我看来就像一个“服务”或“助手”属性,我并不打算在我的应用程序中的任何地方使用它们,只有几次,但我需要它们。我能想到的最简单的事情是,我将这些“服务”属性添加到我的Group对象,并在我的存储库中创建了一个方法来填充它们。但我认为做错了,因为它是实体,我不需要它们在这里。那么我应该在哪里保留这样的“服务”对象呢?我一定要创建一个从Group
这样继承一个新的类:
public class GroupHelper : Group
{
public bool HasChildGroups { get; set; }
public int ChildGroupsCount { get; set; }
public bool HasDeals { get; set; }
public int DealsCount { get; set; }
}
或者,我应该考虑使用一些数据传输对象? 你会如何解决这个问题? 任何帮助表示赞赏。
您的域模型似乎没有反映出儿童与父母组之间的关系,也不反映组与交易之间的关系。这是正常的吗?你是否期望利用知识库并在每次访问某个组的父母或孩子时发出数据库查询? – guillaume31
@ guillaume31:是的,我没有包含任何额外的属性和实体,在我的情况下它们是不相关的,因为我只需要事先知道关于Group实体的一些事情,而不管将来的父 - 子连接如何,这就是为什么我使用这个对象的术语如“服务”,“帮手”,“DTO”。 –