1

私は、趣味とベスト プラクティスの演習として、Python と C# の両方で同じドメイン モデル (ISO 191xx 規格と OGC 抽象モデルに触発された単純な GPS/GIS ライブラリ) を実装しています。

最初に、「まあ、ISO/OGC は完成した UML をくれたので、C# と Python の各クラスに同じ署名を持たせるつもりだ」と考えました。

Python のメソッド シグネチャを当てにできないため、「strict/static vs ダック タイピング」の問題にすぐに行き詰まりました。例えば:

  • コンストラクターのオーバーロードは、C# では非常に一般的で自然ですが、Python では*args **kwargsand 条件に頼る必要があります。
  • プロパティは C# で推奨されていますが、Python で見たほとんどのソース コードはフィールドを直接設定する傾向がありますが、@propertyorの使用property()は非常に簡単です。
  • (等々)。

実際、ある言語と他の言語の間には (明らかに) 明白で非常によく文書化された「考え方の違い」があり、それらの違いを尊重しながら、同時に「同じ」アプリケーション、つまり同等のアプリケーションに行き着きたいと思います。ドメイン モデル、アーキテクチャ、および機能。

だから私の質問は基本的に次のとおりです。

Python と C# で同じ抽象モデル ("UML のような") を実装する場合、どのように進めればよいでしょうか。具体的には、どの構造を不変にする必要があり、どれを異なるものにする必要がありますか?

4

1 に答える 1

1

MDA で「抽象モデル」と呼んだものは Platform Independent Model (PIM) と呼ばれ、C# や Python でのその実装は Platform Specific Model (PSM) と呼ばれます。PIM から PSM への変換/コード ジェネレーターが存在することが想定されているため、これらのコード生成がどのように機能するかによって、適切な C# および Python ソース コードが得られます。通常、このようなツールは、生成されたコードを制御する手段を提供します。そして、そのような制御は通常、生成している PSM に固有の PIM 注釈を介して行われます。お役に立てれば。

于 2015-10-09T09:53:20.960 に答える