我正在Django中编写一个项目,我发现80%的代码都在文件中models.py.这段代码令人困惑,经过一段时间后,我不再明白究竟发生了什么.
这是困扰我的:
User,但从技术上讲,它应该统一创建它们.这是一个简单的例子.起初,User模型是这样的:
class User(db.Models):
def get_present_name(self):
return self.name or 'Anonymous'
def activate(self):
self.status = 'activated'
self.save()
Run Code Online (Sandbox Code Playgroud)
随着时间的推移,它变成了这样:
class User(db.Models):
def get_present_name(self):
# property became non-deterministic in terms of database
# data is taken from another service by api
return remote_api.request_user_name(self.uid) or 'Anonymous'
def activate(self):
# method now has a side effect (send message to user)
self.status = 'activated'
self.save()
send_mail('Your account is activated!', '…', [self.email])
Run Code Online (Sandbox Code Playgroud)
我想要的是在我的代码中分离实体:
实现可以在Django中应用的这种方法有哪些好的做法?
python django model-view-controller business-logic-layer data-access-layer
首先,在任何人尖叫之前,我很难总结一个简单的标题.另一个标题可能是"域模型和MVC模型之间有什么区别?" 或"什么是模特?"
从概念上讲,我理解一个Model是视图和控制器使用的数据.除此之外,关于构成模型的内容似乎存在很多不同的意见.什么是域模型,应用模型,视图模型,服务模型等.
例如,在我最近提出的关于存储库模式的问题中,我被告知空白存储库是模型的一部分.但是,我已经阅读了其他意见,即模型应该从持久性模型和业务逻辑层中分离出来.毕竟,是不是存储库模式应该将具体的持久性方法与模型分离?其他人说Domain模型和MVC模型之间存在差异.
我们举一个简单的例子.MVC默认项目中包含的AccountController.我已经阅读了一些意见,其中包含的帐户代码设计不佳,违反了SRP等等.如果要为MVC应用程序设计一个"适当的"成员模型,那会是什么?
您将如何从模型中分离ASP.NET服务(成员资格提供程序,角色提供程序等)?或者你会吗?
我看待它的方式,模型应该是"纯粹的",也许是验证逻辑..但应该与业务规则分开(除了验证).例如,假设您有一条业务规则,说明在创建新帐户时必须通过电子邮件发送某人.在我看来,这并不属于模型.那它属于哪里?
有人关心这个问题吗?
model-view-controller asp.net-mvc design-patterns business-logic-layer
我知道这可能听起来很愚蠢,但我发现很难理解服务层的需求及其与业务层的差异.
因此,我们使用asp.net mvc 2并拥有数据访问层,它对数据库进行所有查询,然后我们拥有业务层,其中包含需要完成的业务逻辑和验证.最后我们有Presentation Layer,基本上有所有的视图.此外,我们还在不同的文件夹中有一些帮助程序,DTO和viewmodel类作为我们库的一部分.但我试图阅读有关架构的内容,似乎服务层是架构的重要组成部分.
我所理解的是服务层是调用所有功能的东西.但我真的不能在我们的应用程序中看到Service层的需要吗?或者它可能已经存在并且我看不到它......任何人都可以用一个例子解释一个服务层是如何重要的?它与业务层有什么不同,因为从我读过的内容看起来非常相似?如果它在第一个需要的话?我们所要做的就是以最佳方式构建我们的应用程序您对它的想法和经验是什么?
architecture business-logic-layer service-layer asp.net-mvc-2
什么是软件架构中的域对象和域服务?我不熟悉它们或它们与业务逻辑层有何不同?
我有一个业务层,有一些业务对象/ POCO /实体/任何.我还有一些数据访问存储库.到目前为止,我一直在从UI层访问存储库.我实际上需要一些不是直接CRUD的类,因此我将创建一些将执行逻辑的业务逻辑类,并且CRUD和存储库将不会被访问用户界面(可能从一开始就应该完成).
我该怎么称呼这些课程?我唯一能想到的是服务类,但我在这个应用程序中有实际的WCF服务,所以这会让它变得混乱.WCF服务也将使用这些类,因此让服务使用服务类似乎很奇怪而且令人困惑.
我听过很多次,我们不应该将业务逻辑与其他代码或类似的语句混合在一起.我认为我编写的每一个代码(我的意思是处理步骤)都包含与业务需求相关的逻辑.
谁能告诉我究竟什么是业务逻辑?如何区别于其他代码?是否有一些简单的测试来确定什么是业务逻辑,什么不是?
在Django中,建议的软件架构是将所有业务逻辑和数据访问放在模型中.
但是,一些同事建议数据访问层应该与业务逻辑(业务服务层)分开.他们的理由是,如果使用不同的数据源,数据访问层可以隔离更改.他们还说,存在可以在多个模型中的业务逻辑.
但是,当我使用单独的数据访问和业务逻辑层开始编码时,数据访问层很简单(基本上是定义数据库模式的模型代码),它似乎没有增加太多价值.
从django模型中分离数据访问是否真的有价值,或者django是否已经为其ORM提供了足够的数据访问层?
我正在寻找已经实施了相当数量的django应用程序并了解他们的意见的开发人员.这适用于中小型Web应用程序.
django design-patterns business-logic-layer data-access-layer django-models
我们正在开发一个Web应用程序.我们希望可以将我们在此处所做的工作重用于将使用相同数据库的不同应用程序,并使用相同的业务规则来读取和写入所述数据库.
哪种设计更正确
让UI调用Web服务,该服务将使用包含业务逻辑的业务对象,该业务对象将与数据访问层通信.
让UI使用包含业务逻辑的业务对象,该业务逻辑将调用Web服务,然后将与数据访问层进行通信.
让UI用户业务对象包含业务逻辑,该业务逻辑将与数据访问层通信.
web-services business-logic-layer web-applications data-access-layer business-objects
我环顾四周,看到一些很好的代码片段,用于定义规则,验证,业务对象(实体)等,但我不得不承认从未见过一个完整的,写得很好的业务层.
我知道我不喜欢什么,但不知道什么是伟大的.
任何人都可以指出一些优秀的OO业务层(或伟大的业务对象)或让我知道他们如何判断业务层以及什么使一个伟大的?
谢谢
我一直在大量阅读服务层和业务层以及它们的比较方式.我已经在StackOverflow上阅读了关于这个主题的一些线程,我仍然发现自己对两者之间的差异感到困惑,如果有的话.对我而言,它似乎主要是一种命名约定,其中一个开发人员将中间层称为业务层,另一个开发人员可将其称为服务层.从我在SO和网络上看到的代码看起来他们似乎主要做同样的事情 - 即查询存储库,可能进行一些过滤和/或验证并将结果返回到表示层.那么有人可以澄清两者之间的差异吗?或者我在考试中错过了标记?
我正在与EF,MVC 3和VBNET,FYI合作
architecture model-view-controller asp.net-mvc business-logic-layer service-layer