私は、趣味とベスト プラクティスの演習として、Python と C# の両方で同じドメイン モデル (ISO 191xx 規格と OGC 抽象モデルに触発された単純な GPS/GIS ライブラリ) を実装しています。
最初に、「まあ、ISO/OGC は完成した UML をくれたので、C# と Python の各クラスに同じ署名を持たせるつもりだ」と考えました。
Python のメソッド シグネチャを当てにできないため、「strict/static vs ダック タイピング」の問題にすぐに行き詰まりました。例えば:
- コンストラクターのオーバーロードは、C# では非常に一般的で自然ですが、Python では
*args **kwargs
and 条件に頼る必要があります。 - プロパティは C# で推奨されていますが、Python で見たほとんどのソース コードはフィールドを直接設定する傾向がありますが、
@property
orの使用property()
は非常に簡単です。 - (等々)。
実際、ある言語と他の言語の間には (明らかに) 明白で非常によく文書化された「考え方の違い」があり、それらの違いを尊重しながら、同時に「同じ」アプリケーション、つまり同等のアプリケーションに行き着きたいと思います。ドメイン モデル、アーキテクチャ、および機能。
だから私の質問は基本的に次のとおりです。
Python と C# で同じ抽象モデル ("UML のような") を実装する場合、どのように進めればよいでしょうか。具体的には、どの構造を不変にする必要があり、どれを異なるものにする必要がありますか?