Где DI вписывается в CQS? - PullRequest
2 голосов
/ 14 июля 2011

Должны ли вы прибегать к внедрению свойства всякий раз, когда команде требуется зависимость?

Скажите, у меня есть следующая команда.

public class AddReviewCommand
{
    private ISession _session;
    private readonly string _reviewSummary;

    public AddReviewCommand(string reviewSummary)
    {
        _reviewSummary = reviewSummary;
    }

    public void Execute()
    {
        var review = new Review
            {
                AddedBy = Environment.Username,
                AddedDateTime = DateTime.Now,
                ReviewSummary = _reviewSummary
            };

            _session.Save(review);
    }
}

Является ли единственный способ ввести ISession путем инъекции свойства?

1 Ответ

2 голосов
/ 15 июля 2011

Внедрение свойства подразумевает, что зависимость необязательна , что редко является правильным инвариантом. Конструктор Инъекция - гораздо более подходящий шаблон:

public class AddReviewCommand
{
    private ISession _session;
    private readonly string _reviewSummary;

    public AddReviewCommand(string reviewSummary, ISession session)
    {
        _reviewSummary = reviewSummary;
        _session = session;
    }

    public void Execute()
    {
        var review = new Review
        {
            AddedBy = Environment.Username,
            AddedDateTime = DateTime.Now,
            ReviewSummary = _reviewSummary
        };

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