在Python和c#中实现相同的领域模型-哪些应该相同,哪些应该不同

本文关键字:Python 实现 领域模型 | 更新日期: 2023-09-27 18:10:47

我是,作为一个爱好和最佳实践练习,在Python和c#中实现相同的领域模型(一个简单的GPS/GIS库,灵感来自ISO 191xx标准和OGC抽象模型)。

首先,我想:"好吧,ISO/OGC给了我一个完整的UML,所以我将让c#和Python中的每个类具有相同的签名"。

我很快发现自己陷入了"严格/静态vs鸭子类型"的问题中,因为我不能指望python中的方法签名。例如:

  • 在c#中重载构造函数是非常常见和自然的,但在Python中你必须求助于*args **kwargs和条件;c#中鼓励使用
  • 属性,但是我在Python中看到的大多数源代码倾向于直接设置字段,尽管使用@propertyproperty()非常简单。
  • (以此类推)。

实际上,在一种语言和另一种语言之间(显然)有一个明显的和非常充分记录的"思维方式的差异",我希望尊重这些差异,同时以"相同"的应用程序结束,即等效的领域模型、体系结构和功能。

我的问题基本上是:

如果我要在Python和c#中实现相同的抽象模型("类uml"),我应该如何进行,具体来说,哪些结构应该是不变的,哪些应该是不同的?

在Python和c#中实现相同的领域模型-哪些应该相同,哪些应该不同

MDA中你所说的"抽象模型"称为平台独立模型(PIM),它在c#和/或Python中的实现称为平台特定模型(PSM)。假设存在从PIM到PSM的转换/代码生成器,因此根据这些代码生成的工作方式,您将获得适当的c#和Python源代码。通常,这些工具提供了一些方法来控制生成的代码。这种控制通常是通过PIM注释完成的,这些注释是特定于您正在生成的PSM的。