小编Lan*_*och的帖子

Python抽象类 - 如何阻止实例化?

我来自C#背景,其中语言有一些内置的"保护开发人员"功能.据我所知,Python采用"我们都是成年人"的方法,并对开发人员负责,认真细致地编写代码.

也就是说,Python建议使用惯例作为私有实例变量的前导下划线.我的问题是,除了在文档字符串中指定类之外,是否存在将类标记为抽象的特定约定? 我没有在python样式指南中看到任何特别提到的抽象类的命名约定.

到目前为止,我可以想到3个选项,但我不确定它们是否是好主意:

  1. 在类上面的docstring中指定它(可能会被忽略)
  2. 在类名中使用前导下划线(不确定这是否被普遍理解)
  3. def __init__(self):在抽象类上创建一个引发错误的方法(不确定这是否会对继承产生负面影响,就像要调用基础构造函数一样)

其中一个是好的选择还是有更好的选择?我只是想确保其他开发人员知道它是抽象的,所以如果他们试图实例化它们,他们应该对任何奇怪的行为承担责任.

python abstract-class naming-conventions

17
推荐指数
2
解决办法
1万
查看次数

查找值应该建模为聚合根吗?

作为我的域模型的一部分,假设我有一个WorkItem对象.该WorkItem对象具有多种查找值的关系,例如:

WorkItemType:

  • 用户故事
  • 窃听器
  • 增强

Priority:

  • 介质

而且也可能会被更多的,如Status,Severity等...

DDD声明如果聚合根目录中存在某些内容,则不应尝试在聚合根目录之外访问它.因此,如果我希望能够添加像Task这样的新WorkItemTypes,或者像Critical这样的新优先级,那么这些查找值是否需要与自己的存储库聚合根?这似乎有点矫枉过正,特别是如果它们只是一个关键的价值对.我应该如何允许用户修改这些值并仍然符合聚合根封装规则?

domain-driven-design lookup-tables aggregateroot

11
推荐指数
2
解决办法
1747
查看次数