Свободный NHibrnate - Виртуальные вызовы в конструкторе -Лучшая практика - PullRequest
1 голос
/ 15 марта 2011

У меня есть объект, объявленный подобным этому:

public class Comment 
{
  public Comment(string text, DateTime creationDate, string authorEmail)
  {
    Text = text;
    CreationDate = creationDate;
    AuthorEmail = authorEmail;
  }

  public virtual string Text { get; private set; }
  public virtual DateTime CreationDate { get; set; }
  public virtual string AuthorEmail { get; private set; }
}

Я взял его у Можно ли вызывать виртуальные свойства из конструктора объекта NHibernate?

Я получаю предупреждение как «Виртуальные вызовы в конструкторе».

Хотя, это не представляет практической проблемы, потому что виртуальные члены объявляются исключительно для NH-прокси.Однако мне было интересно, стоит ли переместить метод конструктора в новый класс factory , в котором новый метод будет объявлен как

CreateComment(string text, DateTime creationDate, string authorEmail)  

Что будет лучшим в этом случае?

Обратите внимание, что в настоящее время у меня есть 4-5 перегруженных конструкторов в моем доменном объекте.Выше приведен только пример.
Спасибо!

Ответы [ 3 ]

1 голос
/ 15 января 2013

Я тестировал с FluentNHibernate, вы можете сделать это так:

public class Comment
{
    private string _text;
    private DateTime _creationDate;
    private string _authorEmail;

    public Comment(string text, DateTime creationDate, string authorEmail)
    {
        _text = text;
        _creationDate = creationDate;
        _authorEmail = authorEmail;
    }

    public virtual string Text
    {
        get { return _text; }
        private set { _text = value; }
    }

    public virtual DateTime CreationDate
    {
        get { return _creationDate; }
        set { _creationDate = value; }
    }

    public virtual string AuthorEmail
    {
        get { return _authorEmail; }
        private set { _authorEmail = value; }
    }
}
0 голосов
/ 17 марта 2011

Если ваши свойства являются виртуальными для размещения nHibernate, вы можете просто заставить их инкапсулировать конкретные поля (nhibernate знает, как с этим справиться: см. здесь (доступ по умолчанию) и здесь (доступ).
он также поддерживается свободно.

0 голосов
/ 15 марта 2011

Я предпочитаю иметь конструктор без параметров (по умолчанию) и конструировать так:

var comment = new Comment {
                  Text = "Something offensive and political.",
                  CreationDate = DateTime.Now,
                  AuthorEmail = "someonestupidwithanopinion17@aol.com"
              };

Теперь проблема не имеет значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...