什么是在n层asp.net App中存储常量的最佳位置?

时间:2010-12-31 14:22:38

标签: c# asp.net architecture tiers

我想知道存储我应该使用的枚举的最佳位置是什么,就像我的n层应用程序中的常量一样。

所以我有一个带有DAL(连接到数据库)的应用程序,一个BLL(业务流程),一个Data Transfert对象“Layer”(没有任何方法的类,只有字段,这个可以由所有其他人访问)和带有asp页面的界面层。

我的问题是:我有一个枚举:

 public enum ID_FOO : uint
 {
     ALL = 1,
     FOOOne= 2,
     FOOTwo= 3
 }

我可以把这个枚举(和所有其他的)放在哪里干净?不在数据访问层中接口层将不会看到结构,而不是在业务逻辑层中,这不是真正的业务。也许在数据传输对象中,但它真的是“转移对象”吗? 我应该创建另一个图层吗?

感谢所有回复!..

7 个答案:

答案 0 :(得分:7)

我认为这取决于哪些图层可以访问此struct

您说它将由DALDTOs访问。如果由DTOs使用,我觉得它也会暴露给使用DTO图层的任何图层。

如果您觉得它不属于BAL,请创建一个单独的程序集(Common)来共享此类型并改为引用该程序集。这样可以保持清洁。

答案 1 :(得分:2)

听起来这个枚举(以及其他常量)是你的域无处不在的语言的一部分,因此应该随处可用。理想情况下,构成普遍存在的语言的组件将在它们自己的程序集(它们自己的项目)中,该组件由域中的所有其他项目引用,而不管层级。

根据您的描述,听起来您的DTO也是无处不在的语言的一部分。 (将它们视为贫血模型,在具有硬服务边界的域中经常是必需的。)没有任何其他依赖性,这些东西应构成所有其他项目引用的核心程序集。

答案 2 :(得分:1)

我建议使用“横切”图层,其中包含可以在结构中的任何图层之间共享的代码。这可能是您放置此类内容的地方,以及日志,安全性或跨层可能需要的其他内容。

答案 3 :(得分:1)

我将这些类型的东西存储在最具语境感的层中。如果枚举或结构明显属于应用程序中的特定域,则根据其上下文,我会将其放在相关层中。但是,如果它成为可能跨越多个域的那个,那么无论如何都要在它自己的层中重击它。只需确保以对您的应用程序具有上下文意义的方式组织它们。

答案 4 :(得分:0)

你所展示的不是一个结构,而是一个枚举,我假设它将被所有其他层使用,并将进入你的“Transfert”层。 (注意:我之前从未听说过转移层)

答案 5 :(得分:0)

我个人会把它放在业务级别,因为我会在业务层中将这些枚举与其他类一起使用。

答案 6 :(得分:0)

我们通常有一个CompanyName.ProjectName.Core库项目,我们在其中存储我们的枚举,实用程序,常量等。 此解决方案中包含的几乎所有项目都引用了此dll。