我对领域驱动设计方法感到困惑。从网上的来源,我明白这是分离你的Domain Objects
和Database Objects
的方式,但我不明白两者之间的差异。Django和域驱动设计
举一个例子,我们以django教程中的调查例子code为例,有Polls
和Choice
两个模型。
这些是domain level objects
还是database level objects
?
是否需要带ORM的DDD?
如果是的话,你能提供你需要使用DDD方式与ORM
例如一个良好的局面,这是模型
class Polls(models.Model):
question = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
DDD方法的代码,我看到有人写
class PollService(object):
def __init__(self, poll_repository):
self.poll_respository = poll_respository
def update(self, poll_id):
poll = self.poll_respository.fetch_by_id(poll_id)
poll.question += '?'
self.poll_respository.update(poll)
#assume that the following code works?
class PollRepository():
def __init__(self, db):
self.db = db
def update(self, poll):
try:
self.db.session().add(poll)
self.db.session.commit()
except Exception:
self.db.session.rollback()
这是一个正确的方法吗?我在这里看到很多冗余代码,但有人说Polls
是一个域对象,它不应该直接与数据库交谈?
DDD是否总是附带DDD-Reposiotry?为什么我们需要一个DDD库,如果我们有一个ORM
另一种方法
views.py
def update_poll(poll_id):
poll = models.Polls.objects.get(poll_id)
poll.question += '?'
poll.save()
有什么不对的这种做法?
“DDD是否总是附带DDD-Reposiotry?” - 不可以。您可以使用CQRS与Event Sourcing –