Я использую доменный дизайн, и у меня есть довольно четкое представление о моей модели домена. Он содержит более 120 классов и довольно стабилен. Мы реализуем его в .NET 4 и C#. Дело в том, что модель должна быть многоязычной; некоторые атрибуты должны храниться на нескольких языках. Например, класс Person имеет свойство Position типа string
, которое должно хранить значение на английском языке (например, «Библиотекарь») и испанский (например, «Bibliotecario»). Получатель для этого свойства должен возвращать английскую или испанскую версию в зависимости от какого-либо параметра языка.Как создать многоязычную модель домена
И вот начните мои вопросы. Я не уверен, как параметризовать это. Я выделил два основных способа:
- Использовать коллекцию недвижимости. Позиция не была бы
string
, а скорееDictionary<Language, string>
, что позволило бы клиентам получить позицию человека по языку. - Сохраняйте простые, скалярные свойства, но заставляйте их возвращать (или задавать) значение для одного или другого языка в зависимости от общедоступной настройки «текущего языка». Клиентский код задает рабочий язык, а затем все объекты будут установлены и получат значения на этом языке.
Вариант 1 позволяет избежать глобального состояния, но он испортил интерфейс почти каждого класса в моей модели. С другой стороны, вариант 2 менее выразителен, поскольку вы не можете сказать, какой язык вы собираетесь получить, не глядя на глобальные настройки. Кроме того, он вводит зависимость в каждый класс в глобальной настройке.
Обратите внимание, что меня не интересуют реализация БД или ORM; Я работаю только на уровне модели домена.
У меня есть два конкретных вопроса, то:
- Что является лучшим вариантом (1 или 2), чтобы достичь своей цели многоязычной модели предметной области?
- Есть ли другие варианты, которые я не рассматривал, и какие они?
спасибо.
Редактировать. Некоторые из них предположили, что это проблема, связанная с пользовательским интерфейсом, и поэтому ее можно решить с помощью поддержки глобализации/локализации в .NET. Я не согласен. Локализация пользовательского интерфейса работает только в том случае, если вы знаете локализованные литералы, которые должны отображаться пользователю во время компиляции, но это не наш случай. Мой вопрос включает в себя многоязычные данные, которые неизвестны во время компиляции, поскольку они будут предоставлены в виде пользовательских данных во время выполнения. Это не проблема, связанная с пользовательским интерфейсом.
Редактировать 2. Пожалуйста, имейте в виду, что Person.Position - это просто игрушечный пример, иллюстрирующий вопрос. Это не часть реальной модели. Не пытайтесь критиковать его или улучшать его; в этом нет смысла. Наши бизнес-требования включают в себя множество атрибутов, которые не могут быть закодированы как типы перечислений или аналогичные, и должны оставаться свободным текстом. Отсюда и трудность.
На какой платформе вы являетесь? Некоторые из них имеют хорошую (?) Поддержку локализации и интернационализации из коробки. – Oded
.NET 4 и C#. Я знаком с поддержкой интернационализации .NET для WinForms, WPF и ASP.NET, но я не работаю над пользовательским интерфейсом. Речь идет только о модели домена: классы без визуального компонента. – CesarGon
Должен признаться, это звучит странно для меня. Почему это для модели домена, если она не будет видна? – Oded