关于nhibernate项目布局的建议,想把nhibernate相关的代码放在自己的项目中

时间:2011-09-11 10:59:40

标签: c# nhibernate

我正在构建一个asp.net mvc应用程序,到目前为止,我在解决方案中的项目是:

Solution.PROJECT1
PROJECT1.Web
PROJECT1  
PROJECT1.Tests
PROJECT1.Data
PROJECT1.Data.Tests

所以PROJECT1.Data包含我所有与nhibernate相关的代码:实体,映射和存储库。

PROJECT1将拥有我的服务层,并将引用nhibernate项目。 然后,Web将仅引用服务层。

我的问题是,如果我需要在PROJECT1.Data和PROJECT1中放入一些对象怎么办?

例如,我想创建一个Logger类。

我想避免递归程序集引用等。

我应该用这些类创建另一个项目吗?

2 个答案:

答案 0 :(得分:2)

您的设计似乎很好,我会有一个.Core类库项目用于日志记录和其他常见帮助程序,每个项目都可以引用它。

我还有一个单独的.Interfaces和.Entities项目对,通常你希望UI只通过它的接口知道一个实体,所以ui不需要引用实体,但你的服务层就是这样。

我想在接口或公共或实体中放置您可能需要的自定义异常类。 common可能是最好的,但它比其他两个低,所以它取决于你是否已经需要其中一个接口。

答案 1 :(得分:2)

除了@Davide说的话:

我会考虑将实体提取到他们自己的项目中,该项目不会引用Data或nHibernate 这样,您可以确保您的域模型不依赖于数据表示。

另外我认为UI层不与域实体交互,但与DTO(或表示对象)交互是明智的。
这将进一步减少业务逻辑和UI逻辑之间的依赖关系,并且还使您更容易向客户端发送它所需的事物(例如,User实体可能包含{{1}等字段}},PasswordHashSalt。但您只想显示用户的姓名和上次登录日期。如果您使用DTO创建仅包含您需要的内容,并且拥有您的DTO,则会更容易服务层返回 。)