Как спроектировать свойство класса, содержащее коллекцию переводов? Для узоров гуру - PullRequest
1 голос
/ 23 января 2020

Я - шаблон дизайна newb ie, пожалуйста, помогите правильно организовать классы.

У моего объекта есть свойство ' name ', которое должно иметь несколько переводов:

class Entity {
   private int id;
   private TranslationCollection name;
   ...
}

' name ' - должен содержать набор переводов:

{
  'en': 'english word',
  'sp': 'spanish word',
  ... 
}

Поэтому я решил сделать класс ' Translation ':

class Translation {
  private string locale;
  private string value;
  public constructor (locale, value) { ... }
  ...
}

и класс ' TranslationCollection ':

class TranslationCollection {
   private translationArray[];
   public constructor() { 
     this.translationArray = new array() 
   }
   public addTranslation(Translation translation) {
      translationArray.push(translation);
   }
   ...
}

и есть требования:

1 locales could be only from 'listOfLocales' which is available only at runtime.
2 Translation collection could not have repeating locales.
3 Unit testable.

Нормально ли вводить ' listOfLocales 'в' Перевод 'конструктор для проверки локали в списке? В этом случае у меня будет три параметра в конструкторе Translation . И я думаю, что это не очень хороший дизайн.

Или у меня должен быть какой-то ' TranslationFactory ' с ' listOfLocales ', вставленный в конструктор, чтобы создать Перевод с правильным языком?

Или, может быть, я нахожусь не на том пути, и есть лучшее решение?

Как организовать проверку того, что TranslationCollection 'не имеет повторяющихся локалей? Должен ли я проверить в методе addTranslation, что нет элементов массива с местоположениями, совпадающими с новым Translation.location программно, что, кажется, не лучшее решение. Это способ организовать не повторяющуюся коллекцию более декларативно?

...