C# 如何在严格的分层体系结构中分离层,并在不造成不必要冗余的情况下促进模块化? 我已经开始着手为我公司的代码库建立一个新的架构的基础。这项倡议的动力是: 我们的代码库已经有十多年的历史了,当我们试图扩展时,代码库终于崩溃了 顶层的“层”,如果你想这样称呼它们的话,就是一堆经典的ASP和.NET 我们的数据库充满了一堆邪恶的存储过程,其中包含数千行业务逻辑和验证 以前的开发人员创建了“聪明”的解决方案,这些解决方案不可扩展、不可重用,并且表现出非常明显的反模式;这些需要在短时间内弃用
在我进行初始设计时,我一直在大量地引用这些技术,但在我做出任何承诺之前,我仍然有一些挥之不去的问题。在我进入问题之前,以下是我到目前为止对体系结构的了解: (高级别) (深入的业务和数据层) 这些图表基本上显示了我打算如何将每个层分解为多个组件。所以在这个候选架构中,我们有11个程序集,不包括最顶层 以下是每个组件的详细说明:C# 如何在严格的分层体系结构中分离层,并在不造成不必要冗余的情况下促进模块化? 我已经开始着手为我公司的代码库建立一个新的架构的基础。这项倡议的动力是: 我们的代码库已经有十多年的历史了,当我们试图扩展时,代码库终于崩溃了 顶层的“层”,如果你想这样称呼它们的话,就是一堆经典的ASP和.NET 我们的数据库充满了一堆邪恶的存储过程,其中包含数千行业务逻辑和验证 以前的开发人员创建了“聪明”的解决方案,这些解决方案不可扩展、不可重用,并且表现出非常明显的反模式;这些需要在短时间内弃用,c#,.net,architecture,C#,.net,Architecture,在我进行初始设计时,我一直在大量地引用这些技术,但在我做出任何承诺之前,我仍然有一些挥之不去的问题。在我进入问题之前,以下是我到目前为止对体系结构的了解: (高级别) (深入的业务和数据层) 这些图表基本上显示了我打算如何将每个层分解为多个组件。所以在这个候选架构中,我们有11个程序集,不包括最顶层 以下是每个组件的详细说明: Company.Project.Common.OperationalManagement:包含实现异常处理策略、日志记录、性能计数器、配置和跟踪的组件 Compan
:包含实现异常处理策略、日志记录、性能计数器、配置和跟踪的组件Company.Project.Common.OperationalManagement
:包含执行身份验证、授权和验证的组件Company.Project.Common.Security
:包含可用于与其他服务和应用程序通信的组件(基本上是一组可重用的WCF客户端)Company.Project.Common.Communication
:包含用于从高层与业务层交互的接口和抽象类Company.Project.Business.Interfaces
:包含与创建和维护业务工作流相关的组件和逻辑Company.Project.Business.Workflows
:包含封装业务规则和验证的组件Company.Project.Business.Components
:包含代表高层业务实体的数据对象。其中一些可能是唯一的,一些可能是由来自数据层的更细粒度数据实体形成的复合物Company.Project.Business.Entities
:包含用于以存储库样式与数据访问层交互的接口和抽象类Company.Project.Data.Interfaces
:包含用于调用外部系统并从外部系统获取数据的服务客户端和组件Company.Project.Data.ServiceGateways
:包含用于与数据库通信的组件Company.Project.Data.Components
:包含更细粒度的实体,这些实体在较低级别上表示业务数据,适合以事务方式持久化到数据库或其他数据源Company.Project.Data.Entities
编辑:
在阅读了狒狒的答案之后,我想加入一些似乎更相关的额外细节。数据库表也是一团混乱,充其量是准关系的。但是,我不允许完全重新构建数据库并进行数据清理:我能做的最远的事情就是创建新的存储过程并开始弃用旧的过程。这就是为什么我倾向于在数据层中显式定义实体——尝试使用LINQ to SQL(或任何其他ORM)生成的类作为数据实体似乎不可行。我实际上刚刚开始做同样的事情,所以希望这将有助于或至少生成更多注释,甚至对我自己也有帮助:) 1。我对每个模块及其各自程序集的命名约定是否遵循标准约定,或者我应该采用不同的方式进行命名? 据报道,这似乎没问题。他们将其列为:
(|)[.][.]
例如,Microsoft.WindowsMobile.DirectX。