Я смущен насчет подходов, связанных с доменным дизайном. Из источников в сети я понял, что это способ разделения ваших Domain Objects
и Database Objects
, но я не понимаю разницы между двумя.Django и доменный дизайн
В качестве примера можно привести пример code опроса в учебнике django, есть две модели: Polls
и Choice
.
Есть ли эти domain level objects
или database level objects
?
Есть ли необходимость в DDD с ORM?
Если да, то вы можете предоставить хорошую ситуацию, когда вам нужно использовать 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-репозиционированием? Зачем нам нужен репозиторий DDD, если у нас есть ОРМ
Другой подход
views.py
def update_poll(poll_id):
poll = models.Polls.objects.get(poll_id)
poll.question += '?'
poll.save()
Что не так с этим подходом?
«Есть ли DDD всегда с DDD-репозиционированием?» - Нет. Вы можете использовать CQRS с Event Sourcing –