Реализовать одну и ту же модель предметной области в Python и C#. Что должно быть одинаковым и что должно отличаться?

В качестве хобби и передового опыта я выполняю одну и ту же модель предметной области (простая библиотека GPS / GIS, основанная на стандартах ISO 191xx и OGC Abstract Model) как в Python, так и в C#.

Сначала я подумал: "Хорошо, ISO/OGC дал мне готовый UML, поэтому у меня будет каждый класс в C# и в Python, имеющий одинаковую подпись".

Я быстро застрял в проблеме "строгий / статический тип против утиной", так как не могу рассчитывать на сигнатуры методов в python. Например:

  • Перегрузка конструкторов довольно распространена и естественна в C#, но в Python вам приходится прибегать к *args **kwargs и условия;
  • Свойства приветствуются в C#, но большая часть исходного кода, который я видел в Python, имеет тенденцию устанавливать поля напрямую, хотя использование @property или же property() это довольно просто.
  • (и так далее).

На самом деле есть (очевидно) очевидное и очень хорошо задокументированное "различие мышления" между одним языком и другим, и я хотел бы уважать эти различия, в то же время заканчивая "тем же" приложением, то есть эквивалентным модель предметной области, архитектура и функциональность.

Так что мой вопрос в основном таков:

Если я собираюсь реализовать одну и ту же абстрактную модель ("UML-подобную") в Python и C#, как мне поступить, в частности, какие конструкции должны быть инвариантными, а какие - разными?

1 ответ

То, что вы назвали "абстрактной моделью" в MDA, называется независимой от платформы моделью (PIM), а ее реализация в C# и / или Python называется платформо-зависимой моделью (PSM). Предполагается, что существуют преобразования / генераторы кода из PIM в PSM, поэтому в зависимости от того, как работают эти генерации кода, вы получите соответствующий исходный код на C# и Python. Обычно такие инструменты предоставляют некоторые средства для управления сгенерированным кодом. И такой контроль обычно осуществляется с помощью аннотаций PIM, которые относятся к PSM, который вы генерируете. Надеюсь это поможет.

Другие вопросы по тегам