Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python和C#中实现相同的域模型-什么应该相同,什么应该不同?_C#_Python_Architecture_Domain Model_Mda - Fatal编程技术网

在Python和C#中实现相同的域模型-什么应该相同,什么应该不同?

在Python和C#中实现相同的域模型-什么应该相同,什么应该不同?,c#,python,architecture,domain-model,mda,C#,Python,Architecture,Domain Model,Mda,作为一项爱好和最佳实践练习,我将在Python和C#中实现相同的域模型(一个简单的GPS/GIS库,灵感来自ISO 191xx标准和OGC抽象模型) 首先,我想:“好吧,ISO/OGC给了我一个完整的UML,所以我将在C#和Python中让每个类都有相同的签名” 我很快发现自己陷入了“严格/静态vs duck类型”的问题,因为我不能指望python中的方法签名。例如: 重载构造函数在C#中非常常见和自然,但在Python中,必须使用*args**kwargs和条件 C#鼓励使用属性,但我在Py

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

首先,我想:“好吧,ISO/OGC给了我一个完整的UML,所以我将在C#和Python中让每个类都有相同的签名”

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

  • 重载构造函数在C#中非常常见和自然,但在Python中,必须使用
    *args**kwargs
    和条件
  • C#鼓励使用属性,但我在Python中看到的大多数源代码都倾向于直接设置字段,尽管
    @property
    property()
    的使用非常简单
  • (等等)
事实上(很明显)一种语言和另一种语言之间存在着一个明显且有很好证明的“思维方式差异”,我希望尊重这些差异,同时最终得到“相同”的应用程序,即等效的领域模型、体系结构和功能

所以我的问题基本上是:

如果我要在Python和C#中实现相同的抽象模型(“类似UML”),我应该如何进行,具体来说,哪些构造应该是不变的,哪些应该是不同的

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