Вопрос о Репозиториях и их методах Сохранения для объектов области

Используйте переменную groups:

- name: start the cluster
  command: "pcs cluster setup --start --name cluster01 --force {{ groups['gfs2_hosts'] | join(' ') }}"
  when: " 'is not currently running' in cluster_status.stderr "

Прочтите Доступ к информации о других хостах с магическими переменными из официальной документации для получения дополнительной информации.

9
задан Community 23 May 2017 в 11:55
поделиться

2 ответа

Я сам использовал подход IRepository в последнее время, который предлагает Keith. Но, Вы не должны фокусироваться на том шаблоне здесь. Вместо этого существует еще несколько частей в сборнике пьес DDD, который может быть применен здесь.

Используйте Объекты Значения для своих Адресов

Во-первых, существует понятие Объектов значения (VO), которые можно применить здесь. В Вас случай это был бы Адрес. Различие между Объектом Значения и Объектом Объекта - то, что Объекты имеют идентификационные данные; VOs не делают. Идентификационные данные VO действительно являются суммой, он - свойства, не уникальные идентификационные данные. В книжном Дизайне Доменного Диска Быстро (это - также бесплатная загрузка PDF), он объясняет это очень хорошо путем заявления, что адрес является действительно просто точкой на Земле и не нуждается в отдельных подобных SocialSecurity идентификационных данных как человек. Та точка на Земле является комбинацией улицы, числа, города, zip и страны. Это может иметь значения широты и долготы, но все еще это - даже VOs по определению, потому что это - комбинация двух точек.

Используйте Сервисы для объединения Ваших объектов в единственный объект для реакции.

Кроме того, не забывайте о Сервисном понятии в сборнике пьес DDD. В Вашем примере тот сервис был бы:

public class PersonCompanyService
{
  void SavePersonCompany(IPersonCompany personCompany)
  {
    personRepository.SavePerson();
    // do some work for a new company, etc.
    companyRepository.SaveCompany();
  }
}

Существует потребность в сервисе, когда у Вас есть два объекта, которые нуждаются оба, нуждаются в подобном действии для координирования комбинации других действий. В Вашем случае, сохраняя Человека () и создавая пустую Компанию () одновременно.

ORMs обычно требуют идентификационных данных, период.

Теперь, как Вы пошли бы о сохранении Адреса VO в базе данных? Вы использовали бы IAddressRepository, очевидно. Но так как большинство ORMs (т.е. LingToSql) требует, чтобы все объекты имели Идентификационные данные, вот прием: Mark идентификационные данные как внутренние в Вашей модели, таким образом, это не выставляется за пределами Вашего уровня Model. Это - собственный совет Steven Sanderson.

public class Address
{
  // make your identity internal
  [Column(IsPrimaryKey = true
    , IsDbGenerated = true
    , AutoSync = AutoSync.OnInsert)]
  internal int AddressID { get; set; }

  // everything else public
  [Column]
  public string StreetNumber { get; set; }
  [Column]
  public string Street { get; set; }
  [Column]
  public string City { get; set; }
  ...
}
6
ответ дан 4 December 2019 в 23:41
поделиться

На основе моего недавнего опыта использования шаблона репозитория я думаю, что Вы извлекли бы выгоду из использования универсального репозитория, теперь общего IRepository T. Тем путем Вы не должны были бы добавлять методы репозитория как SavePerson (Человек человека). Вместо этого у Вас было бы что-то как:

IRepository<Person> personRepository = new Repository<Person>();
Person realPerson = new Person();
personRepository.SaveOrUpdate(realPerson);

Этот метод также предоставляет себя хорошо Разработке через тестирование и Насмешке.

Я чувствую, что вопросами о поведении в Вашем описании были бы опасения за Домен, возможно, Вы должны иметь метод AddCompany в своем классе Человека и изменить свойство Company на

public Company Company { get; private set; }

Моя точка; смоделируйте домен, не волнуясь о, как данные будут сохранены к базе данных. Это - беспокойство о сервисе, который будет использовать Вашу модель предметной области.

Назад в Репозиторий, взгляните на это сообщение для хорошего объяснения IRepository по LinqToSql. Блог Mike's имеет много других сообщений на Репозиториях. Когда Вы действительно приезжаете для выбора, ORM I может рекомендовать HHibernate по LinqToSql, последний является ныне несуществующим, и NHibernate имеет большое сообщество поддержки.

0
ответ дан 4 December 2019 в 23:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: