我最近一直在阅读有关域驱动设计(DDD)的内容,我喜欢这个概念,特别是Onion架构的概念与它一起使用(https://www.youtube.com/watch?v=pL9XeNjy_z4)。
我很想知道我们可以用Django Rest Framework实现这样的架构,或者换句话说我们可以用洋葱拱形式的Django休息框架来做DDD吗?
作为一个例子,我以下列方式编写DRF代码:
在models.py中,我会定义我的模型:
class Library(models.Model):
library_id = models.AutoField(primary_key=True)
name = models.CharField(max_length=30)
...
#This helps to print in admin interface
def __str__(self):
return u"%s" % (self.name)
在serializers.py中我会有我的模型序列化器:
class LibrarySerializer(serializers.ModelSerializer):
class Meta:
model = Library
fields = '__all__'
我会在urls.py中找到相应的网址:
router.register(r'libraries', LibraryViewSet)
并在views.py中执行CRUD操作:
class LibraryViewSet(viewsets.ModelViewSet):
queryset = Library.objects.all()
serializer_class = LibrarySerializer
这与DDD /洋葱架构有什么关系(可能有适当的修改)?
答案 0 :(得分:0)
当模型反映域(主题,手头的问题)时,最有可能出现在CRUD的对立面中。 创建,读取,更新,删除是并非总是无所不在的语言一部分的操作。
此外,洋葱/六角形体系结构将要求该模型不依赖于任何框架或库代码。可以反转这些依赖关系并使其持久性和传递机制取决于您的模型(而不是在您的域内使用任何Django导入),但是对于Django无疑是困难的。该框架规定了与此相反的情况。
答案 1 :(得分:0)
DDD 的想法更多是关于关注点分离。将逻辑与框架功能分离是至关重要的,在任何框架中都是如此。如果您使用 django 中的持久性/ORM 东西很好,但不要将它与您的域逻辑混淆,请始终将其分开。该逻辑也应该适用于不同的 ORM。中间应该总是有某种层。