# OnionArch **Repository Path**: MineProjects/OnionArch ## Basic Information - **Project Name**: OnionArch - **Description**: OnionArch是一个ASP.NET的架构演示程序。遵循的项目基本原则如下: 最少依赖>最少重复>最少代码>最快过程>最佳性能 OnionArch的目的既不是不是展示技术的使用也不是要做一个框架,更不是要树立任何标准,它的核心目的一直是演示我对项目架构的理解。 - **Primary Language**: C# - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 6 - **Created**: 2022-10-10 - **Last Updated**: 2022-10-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #概述: OnionArch是一个.NET洋葱型架构的演示程序。架构依赖遵循洋葱型架构风格,外层可以对内层依赖,内层绝对不能反向依赖。 OnionArch的目的既不是不是展示技术的使用也不是要做一个框架,它的核心目的一直是演示我对项目架构的理解。 #遵循的项目基本原则如下: 1. 最少依赖 2. 最少重复 3. 最少代码 4. 最快过程 5. 最佳性能 #核心项目决策(Domain、Application、Infrastructure) 1.Domain:领域层。只包含领域逻辑。不依赖任何外层: (1)不引用解决方案的其他项目。 (2)不包含必须被外层实现的接口。 2.Applicaiton:应用层。只包含应用逻辑和接口定义: (1)只引用Domain。 (2)对外提供用例级别的服务接口和实现。 (3)不关心具体功能的实现,只定义必须使用的接口。这些接口将在Infrastructure层中实现。 3.Infrastructure:基础设置层。实现应用接口,将接口的具体实现转发给第三方库。 (1)只引用Domain和Application。 (2)引用Domain和Application,只实现必要的接口。具体功能的实现依赖第三方库。 #表现层项目决策(Web、Web.Infrastructure) 1.Web:采用ASP.NET MVC框架的网站。 (1)引用Domain、Application和Web.Infrastructure。 (2)不引用Infrastructure层。 2.Web.Infrastructure:表示层中的基础设施层。包含: (1)Core:Domain和Application相关的ASP.NET(MVC)可复用组件。 (2)Mvc:Domain和Application无关的ASP.NET(MVC)前端可复用组件。同样是依赖第三方库的功能。 (3)Libraries:Domain和Application无关的.NET可复用组件。 #其他 1.Infrastructure和Web.Infrastructure中如果第三方库不满足要求,则: (1)前期,自定义业务逻辑无关的库在Libraries中。 (2)后期,独立Libraries中的库为单独的第三方库。 2.Domain中关于接口的原则: (1)尽量不包含接口。 (2)如果包含接口,实现页一定在Domain中。 (3)如果一定要引入第三方库,采用接口调用。 3.关于IRepository和Repository: (1)在Application中定义接口 (2)在Infrastructure中实现接口 (3)目前Infrastructure中采取Entity Framework作为第三方库。