2009-12-16 60 views
4

我想弄清楚如何在数据,业务和UI层之间共享我的实体。是否最好为这些实体创建一个单独的项目,并将被所有层引用?怎么样枚举和自定义异常?我有一些仅由UI项目使用的枚举,还有一些由Business使用。这是否意味着我应该有两个单独的Enum文件夹:一个在Business项目中,另一个在UI中?与异常类似?到目前为止,我一直在一个单独的项目中维护实体,枚举和异常,这三个层都被引用。业务实体,枚举,自定义异常的位置?

我的业务项目有经理类(比如ProductManager.cs),其中有像列表的GetProducts()和SaveProduct(产品)的方法,等等。

回答

1

我通常把枚举和自定义异常,在一个界面定义放在一起单独的项目。

1

如果您需要所有层中的实体,那么使用单独的项目是(imo)最好的方法。

2

如果这些实体在所有这些层中都具有语义含义,那么我会建议将它们放在一个单独的项目/程序集中,以便所有层都知道。

如果您具有特定于一个图层的实体,我会将它们限制为该图层。因此,例如,您不会允许UI代码引发业务层异常,或者业务层使用UI枚举。

取决于你在做什么,在保持共享类型的同一个项目/程序集中保留特定于层的类型可能没有什么坏处,但我会考虑将它们限制在自己的层上,这是最佳实践。

2

你一直在做正确的事情。与所有实体创建一个单独的项目几乎总是要走的路。如果枚举和异常与实体相关,则它们也属于该实体。

+0

是否可以将枚举和异常视为实体? – Prabhu 2009-12-16 21:32:59

2

认为封装。 将它们放在需要它们的地方,而不是在更广的范围内。

如果仅在UI层中使用某些内容,请勿将其暴露给其他图层。但是,如果它被用于两层或三层,那么将其定义在最底层(例如,如果UI位于数据库上的业务逻辑上,那么BL和UI中使用的某些内容可以在BL中定义)。或者如果某件事或多或少具有全球性,请将其移至第三方共享库。

此外,尽量减少对共享实体的需求:例如,建议(出于正当理由)避免自定义异常。它们中的大多数通常可以通过现有的系统异常来表示,并带有一些额外的信息(例如InvalidOperationException和消息中的细节),从而最大限度地减少处理全新的异常类的需求 - 以及无需决定在哪里定义自定义异常类型。