我创建了一个POCO模型类和一个处理持久性的存储库类.由于POCO无法访问存储库,因此存储库中有许多业务逻辑任务似乎不对.根据我的阅读,看起来我需要一个位于UI使用者和存储库层之间的服务层.我不确定的是它应该如何工作......
除了服务层,还应该有一个单独的业务逻辑层,还是那个服务层的角色?
每个存储库应该有一个服务吗?
服务层是UI可以实例化模型对象还是存储库为服务提供新模型实例的唯一方式?
我是否将我的参数,模型和其他验证放在服务层中进行检查以确保输入有效以及更新前数据库中是否存在要更新的项目?
模型,存储库和UI都可以调用服务层,还是仅供UI使用?
服务层应该是所有静态方法吗?
从UI调用服务层的典型方法是什么?
模型与服务层应该进行哪些验证?
以下是我现有图层的示例代码:
public class GiftCertificateModel
{
public int GiftCerticiateId {get;set;}
public string Code {get;set;}
public decimal Amount {get;set;}
public DateTime ExpirationDate {get;set;}
public bool IsValidCode(){}
}
public class GiftCertificateRepository
{
//only way to access database
public GiftCertificateModel GetById(int GiftCertificateId) { }
public List<GiftCertificateModel> GetMany() { }
public void Save(GiftCertificateModel gc) { }
public string GetNewUniqueCode() { //code has to be checked in db }
public GiftCertificateModel CreateNew()
{
GiftCertificateModel gc = new …Run Code Online (Sandbox Code Playgroud) c# asp.net domain-driven-design repository repository-pattern
当我开始使用.NET Webforms时,我找不到要跟随的文件夹结构,因为VS提供了像"App_Code"这样的应用程序文件夹,大多数应用程序示例都在其中放置了"BLL","DAL"等等.
但是现在在MVC中,我检查的每个例子都使用不同的结构,这次没有标准,我没有在Google或SO上找到一个好的解决方案.
所以,也许我们可以分享我们如何组织我们的MVC项目,可以帮助其他人做出自己的想法.这是我使用的中小型项目的结构:
App_Data
Areas
Admin
Controllers
Models
Views
MyAccount
Controllers
Models
Views
Content
Images
Scripts
Styles
Controllers
HomeController.cs
Helpers
ExtensionMethods // I.e. based on HtmlHelper, use "helper" suffix
MenuHelper.cs // to be called as html.Menu()
Utilities.cs // Other generic (static) libraries, no suffix used
Models
ViewModels // for passing models to Views
RegisterViewModel.cs // use "ViewModel" suffix
Customer.cs // to extend models like adding Model Validation
Repositories
CustomerRepository.cs // use "Repository" suffix
Services
CustomerService.cs // use "Service" suffix, …Run Code Online (Sandbox Code Playgroud) asp.net-mvc conventions naming-conventions asp.net-mvc-3 asp.net-mvc-2
我尝试按照最佳实践方法构建我最后一个相当大的MVC项目,但是我不太明白我在做什么.
它有一个数据,业务和Web(MVC)项目,但控制器包含大部分代码,数据层使用NHibernate并且有一些存储库负责太多事情,而业务层是任何不支持的东西的倾销场不属于其他两个项目.它可以工作,但我觉得它可以设置得更好 - 我不满意的主要事情是胖控制器和存储库.
我正在开始一个可能会变得合适的新项目,所以我花了更多的时间试图让我的设计在前面.阅读了一下之后,我正在尝试为每个聚合根创建一个存储库,然后在业务层中为表示层中的每个控制器提供一个服务.
我最初的希望是大部分代码将进入服务,而这与较小的存储库相结合将使我的控制器和数据层变薄.到目前为止,这种情况并没有发生.
我读过的所有内容都表明View Model不应该从Business层返回,而应该填充在表示层中,所以目前我的服务层主要是将模型从我的数据层传递到表示层然后做了准备视图模型所需的东西.所以我仍然有胖控制器,还有一个瘦的业务和数据层.
我的表示层也知道我的业务和数据层,但我认为这种分离的一部分是减少耦合?
我错了吗?我是否应该停止尝试盲目跟随我在互联网上阅读的内容,只需在业务层中准备视图模型,这样我就可以将大部分代码移到那里?我应该回到经典的ASP吗?:)
我已经为我的新asp.net mvc项目创建了以下项目结构,我得到了一些反馈,因为其他人正在构建他们的项目以及我是否会改进我的...
这是我到目前为止:
+Assets
-+Images
-+Scripts
-+Stylesheets
-+... 'More things like the above here
+Controllers
-+Support
--+Actions 'Any custom action classes
--+Controllers 'Base controller classes
+Models
-+Domain 'Contains any class that specialise view specific domain logic
--+UrlProcessing 'Encoding/decoding business entities as URL parts
--+... 'More things like the above here
-+Views 'Contains view models
--+Support
---+Views 'Base classes for any view models
+Support
-+Application 'Global application interface classes (i.e. class that wraps the function of the global asax)
-+Configuration 'Typed …Run Code Online (Sandbox Code Playgroud) 将Scripts文件夹保留在默认的ASP.NET MVC项目结构中是否有任何好处.
在我看来,为Content文件夹下的脚本,css文件和图像创建子文件夹更有意义.
这样做的任何缺点?
背景:我和我的同事正在开发asp.net mvc项目...我们有一台计算机作为服务器工作,项目将存储在...我们每个人都有一个项目的副本,我们得到了乌龟cvs成立.
问题:当你想提交一些东西时,你提交的文件到底是什么?.. asp.net报告了许多与服务器不同的dll文件,csproj文件,cs和sln文件.
也许我的问题不是我应该问的正确的问题,所以我希望能够深入了解团队工作的最佳方法.
我一直在使用S#arp架构,但这可能适用于任何DDD架构(域/核心,应用服务,基础架构和演示).
有许多ASP.NET MVC示例显示控制器通过存储库接口在域模型上运行.事实上,S#arp架构教程的StaffMembersController引用了IStaffMemberRepository,它调用了FindAllMatching(在存储库中实现).StaffMember实体(也在域/核心层)看起来像一个数据包,其属性和属性的最小验证.
假设您的控制器变得臃肿,看起来像商业问题.在阅读Microsoft的"应用程序架构指南"中的Microsoft "设计业务实体"一章后,我认为这些问题可称为"域服务".
我想将这些域服务放在域/核心层,但我不确定它们应该去哪里.我应该在域/核心项目中创建一个服务文件夹,该文件夹承载带有其下面的实现文件夹的接口吗?这似乎是一个很好的方法,但我想看看别人如何处理这个问题.
谢谢!
architecture asp.net-mvc domain-driven-design repository s#arp-architecture
asp.net-mvc ×5
asp.net ×3
repository ×2
.net ×1
architecture ×1
c# ×1
conventions ×1
solution ×1
structure ×1