1

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

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

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

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

实际上,一种语言和另一种语言之间(显然)存在明显且有据可查的“思维方式差异”,我想尊重这些差异,同时最终得到“相同”的应用程序,即等效领域模型、架构和功能。

所以我的问题基本上是:

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

4

1 回答 1

1

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

于 2015-10-09T09:53:20.960 回答