相关疑难解决方法(0)

在django中分离业务逻辑和数据访问

我正在Django中编写一个项目,我发现80%的代码都在文件中models.py.这段代码令人困惑,经过一段时间后,我不再明白究竟发生了什么.

这是困扰我的:

  1. 我发现我的模型级别(它应该只负责处理数据库中的数据)也发送电子邮件,在API上运行到其他服务等等,这让我觉得很难看.
  2. 此外,我发现在业务逻辑中放置业务逻辑是不可接受的,因为这样很难控制.例如,在我的应用程序中,至少有三种创建新实例的方法User,但从技术上讲,它应该统一创建它们.
  3. 我并不总是注意到我的模型的方法和属性何时变得不确定,何时会产生副作用.

这是一个简单的例子.起初,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)

我想要的是在我的代码中分离实体:

  1. 我的数据库,数据库级别的实体:什么包含我的应用程序?
  2. 我的应用程序的实体,业务逻辑级别:什么可以使我的应用程序?

实现可以在Django中应用的这种方法有哪些好的做法?

python django model-view-controller business-logic-layer data-access-layer

441
推荐指数
5
解决办法
9万
查看次数

OO设计原则是否适用于Python?

似乎许多OO讨论使用Java或C#作为示例(例如Head First Design Patterns).

这些模式是否同样适用于Python?或者如果我遵循设计模式,我最终会用Python编写Java(这显然是一件非常糟糕的事情)?

python oop

25
推荐指数
2
解决办法
6375
查看次数

编程语言和设计模式

不同的编程语言具有不同的功能或缺少某些功能.设计模式是解决这些缺点的一种方法.我已经看过有关静态,面向对象语言(Java,C++)中的设计模式的书籍和列表,还有关于Python中设计模式的视频.

我有兴趣在其他语言中看到一些常见的设计模式,如Forth,Icon,Lisp等.简短描述它们的外观以及为什么它们需要一种语言才会很好.也许是对另一种语言的简短比较,可以在没有设计模式的情况下解决这个问题.

design-patterns programming-languages

3
推荐指数
1
解决办法
5015
查看次数

Python观察者设计模式

我有两个问题:

  1. 我正在尝试在Python中实现Observer设计模式.最简单的实现是什么?

    我需要它来观察我正在构建的渲染农场中的机器状态.

  2. 那里有没有好的Python设计模式书?

python design-patterns

2
推荐指数
1
解决办法
2422
查看次数