域模型类是否应该始终依赖于原语?

拉蒙

到一半时Architecture Patterns with Python,我有两个问题要问如何构造和实例化领域模型类。假设在我的域模型中,我有以下课程DepthMap

class DepthMap:
    def __init__(self, map: np.ndarray):
        self.map = map

根据我从书中了解到的,该类是不正确的,因为它依赖于Numpy,并且应该仅依赖于Python原语,因此出现了一个问题:域模型类应仅依赖于Python原语,还是存在异常?

假设上一个问题的答案是类应仅依赖于基元,那么从Numpy数组创建DepthMap的正确方法是什么?假设现在我可以在其中创建DepthMap对象的格式更多。

class DepthMap:
    def __init__(self, map: List):
        self.map = map
    
    @classmethod
    def from_numpy(cls, map: np.ndarray):
        return cls(map.tolist())

    @classmethod
    def from_str(cls, map: str):
        return cls([float(i) for i in s.split(',')])

或工厂:

class DepthMapFactory:
    @staticmethod
    def from_numpy(map: np.ndarray):
        return DepthMap(map.tolist())

    @staticmethod
    def from_str(map: str):
        return DepthMap([float(i) for i in s.split(',')])

我认为,即使Repository Pattern他们在书中通过的,也可能适合以下内容:

class StrRepository:
    def get(map: str):
        return DepthMap([float(i) for i in s.split(',')])

class NumpyRepository:
    def get(map: np.ndarray):
        return DepthMap(map.tolist())

第二个问题:从不同来源创建域模型对象时,正确的方法是什么?

注意:我的背景不是软件;因此,某些OOP概念可能不正确。除了发表意见之外,请发表评论,让我知道如何改善这个问题。

鲍勃·格雷戈里

我写这本书,所以我至少可以有一个在回答你的问题。

您可以在域模型中使用除原语(str,int,boolean等)之外的其他东西。通常,尽管我们在书中没有显示它,但是您的模型类将包含对象的整个层次结构。

您要避免的是,技术实现会以难以表达意图的方式泄漏到代码中。除非您的域是Numpy,否则在代码库中传递Numpy数组的实例可能是不合适的。我们试图通过将有趣的东西与胶水分离来使代码更易于阅读和测试。

为此,您可以拥有一个DepthMap类,该类公开一些行为,并且恰好有一个Numpy数组作为其内部存储。这与使用库中的任何其他数据结构没有什么不同。

如果您将数据作为一个平面文件之类的东西,并且创建Numpy数组涉及复杂的逻辑,那么我认为Factory是合适的。这样,您可以将无聊的,丑陋的代码保留在系统边缘和模型之外,以生成DepthMap。

如果从字符串创建DepthMap实际上是单线的,那么类方法可能会更好,因为它更易于查找和理解。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

域模型依赖于视图模型有多糟糕?

“特殊方法的隐式使用始终依赖于特殊方法的类级绑定”

是否依赖于numpy订单?

当类依赖于隐式时,是否有惯用的方法将类转换为对象?

当一个属性依赖于 2 个类时,它应该定义在哪个类上?

更改依赖于域的 css 并添加“?” 进入领域

测试依赖于类路径上类的存在的代码

在Startup类中获取依赖于DI的类的实例

当viewModel依赖于多个模型时如何访问数据

Maven无法编译依赖于rt.jar的类

依赖于特定类类型的C ++模板方法?

运行依赖于终端中的Jar文件的类

从 shell 运行依赖于其他类的 java 程序

C ++依赖于派生类的纯虚函数

如何让变量依赖于类中的其他变量?

如何转发声明依赖于变体定义的类,而后者又依赖于模板化类?

OpenGL是否依赖于GTK +之类的窗口系统?

在CUDA中,UVA是否依赖于任何硬件功能?

Tensorflow图-检查节点是否依赖于占位符

Xdebug 是否依赖于 PHP 版本(VSCode IDE)?

功能组合是否依赖于部分应用?

Cargo是否依赖于从源头构建Cargo本身?

Eigen的实现是否依赖于标准容器?

在Swift中从UIViewController继承的类中是否可以初始化依赖于另一个变量?

图片依赖于链接

Python-Django-模型BooleanField依赖于同一模型中的其他BooleanField

创建依赖于 Django 中另一个模型的模型 ChoiceField

Dagger2:组件不能依赖于多个作用域组件

如何设计一个接受所有域但依赖于某些状态的局部函数?