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

时间:2014-06-28 01:10:04

标签: c# python architecture domain-model mda

作为业余爱好和最佳实践练习,我在Python和C#中实现相同的域模型(一个简单的GPS / GIS库,受ISO 191xx标准和OGC抽象模型启发)。

首先,我考虑过:"好吧,ISO / OGC给了我一个完整的UML,所以我将使用C#和Python中的每个类具有相同的签名"。

我很快发现自己被困在"严格/静态vs鸭子打字"问题,因为我不能指望python中的方法签名。例如:

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

实际上(显然)有一种明显且非常好的文明记录与#34;在一种语言和另一种语言之间,我希望尊重这些差异,同时最终得到同样的"同样的"应用程序,即等效域模型,体系结构和功能。

所以我的问题基本上是:

  

如果我要在Python和C#中实现相同的抽象模型(&#34;类似于UML&#34;),我应该如何进行,具体而言,哪些结构应该是不变的,哪些应该是不同的?< / p>

1 个答案:

答案 0 :(得分:1)

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