1

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

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

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

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

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

谢谢大家的回复!..

4

7 回答 7

7

我认为这取决于哪些层将访问 this struct

你说它将被DALand访问DTOs。如果由 使用DTOs,我觉得它也会暴露在任何使用DTO图层的图层中。

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

于 2010-12-31T14:28:48.730 回答
2

听起来这个枚举(以及其他常量)是您的域无处不在的语言的一部分,因此应该在任何地方都可用。理想情况下,构成通用语言的组件将位于它们自己的程序集(它们自己的项目)中,该程序集被域中的所有其他项目引用,无论层级如何。

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

于 2010-12-31T14:29:20.423 回答
2

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

于 2010-12-31T14:59:26.320 回答
1

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

于 2010-12-31T14:30:08.703 回答
1

我将这些类型的东西存储在最符合上下文意义的层中。如果一个枚举或结构公然属于您的应用程序中的特定域,基于其上下文,那么我会将它放在相关层中。但是,如果它最终成为一个可能跨越多个域的领域,那么一定要在自己的层中对其进行打击。只需确保以对您的应用程序具有上下文意义的方式组织它们。

于 2010-12-31T15:01:39.357 回答
0

您在此处显示的不是结构,而是枚举,我认为它将被所有其他层使用,并将进入您的“传输”层。(注意:我以前从未听说过传输层)

于 2010-12-31T14:27:10.493 回答
0

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

于 2010-12-31T14:28:00.373 回答