Django rest框架中的序列化/序列化和SOLID原则

kuarbcqp  于 2023-10-21  发布在  Go
关注(0)|答案(1)|浏览(161)

我想知道下面哪种模式更符合SOLID原则。
假设Django Rest Framework中有一个class CreateView(generics.CreateAPIView)

选项1:用于序列化/非序列化的单个序列化程序

from rest_framework import serializers

class MySerializer(serializers.Serializer):
    field1 = serializers.CharField())

    def to_representation(self, instance):
        return {
            'field1': instance.field1,
        }

选项2:创建2个类

  1. MySerializer(序列化我想要创建的响应并传递给response.data
  2. MyDeserializer(删除我的数据/执行消毒/验证传入的request.data
d6kp6zgx

d6kp6zgx1#

我对SOLID原则不是很有经验;事实上,我目前正在阅读罗伯特C。但是我曾经在不同的项目中使用Django和REST框架进行开发(电子商务,移动的应用程序和商业工具的后端)。我想试试答案。我请大家纠正我的错误,并作出澄清。
单一责任原则:在不同视图之间共享的序列化器(或者甚至对于在不同方法中使用它的相同视图,如get、post、patch)不遵守该原则。一般来说,每个视图(或同一视图的每个方法)都是为了做不同的事情。因此,如果视图中的更改需要在共享序列化器中支持新字段,则必须更改每个视图(或每个方法)(必须在每个方法中处理新字段,否则这可能导致错误或至少优化问题)。为了遵守这一原则,为每种用途使用不同的序列化程序类似乎是一个更好的选择。
开闭原理:我对这个原则的理解是:创建一个序列化器类作为公共基础,并为每种需要创建一个特定的序列化器,该序列化器从第一个继承(在您的情况下,一个用于阅读,另一个用于写入)。所以如果你为同一个视图的get()和post()方法共享一个唯一的序列化器类,那么这个原则就不被遵守了。
Liskov替换原理:关于你的一个读取和创建对象的类的具体例子,我不知道该说什么。当游戏中只有一个职业时,这些原则似乎不适用。我在想你观点的演变。想象一下,将来你必须实现一个新版本的对象创建。你必须保持当前版本不变。在新版本中,您必须添加一些用于创建对象的必填字段。在这种情况下,可以使用当前序列化程序的新子类实现新版本。然后,LSP得到尊重。
界面隔离:当你从django rest framework base ModelSerializer类继承时,你的类以所有including方法开始:create(),update(),delete().但也许你只想使用其中一个或一个都不想。我不知道如何避免这种情况,以尊重接口隔离。
依赖倒置原理:我不知道你的情况与依赖倒置原理有什么关系
我希望这个想法的开始是有帮助的。是为了我谢谢你的提问。

相关问题