Является ли этот код бизнес-логикой или логикой представления? - PullRequest
4 голосов
/ 07 августа 2010

Этот код существует в представлении:

       if (Model.Group.IsPremium && null != Model.Group.ContactInfo)
       {
           Html.RenderPartial("ContactInfo", Model.Group.ContactInfo);
       }

на первый взгляд, это логика представления и все в порядке. Но это не устраивает меня.

Дело в том, что бизнес-требование отображать контактную информацию, если группа классифицируется как премиум, что означает, что они заплатили.

Что вы, ребята, думаете? Должна ли эта логика быть перенесена в HtmlHelper или удалена другими способами? Или это предполагаемое использование View? Что лучше всего делать с этим кодом?

Ответы [ 2 ]

9 голосов
/ 07 августа 2010

Я бы создал ViewModel, которая инкапсулирует эту логику в виде логического свойства DisplayContactInfo.Зависит от того, насколько «чистыми» вам нужны ваши взгляды.

1 голос
/ 07 августа 2010

Я бы определенно переместил это в ViewHelper. Это так, потому что, как только вы начинаете писать логику представления в представлениях - aspx-файлах - вы начинаете создавать «суп-тег», который уменьшает понятность кода и, следовательно, увеличивает затраты на обслуживание.

Еще одно преимущество использования ViewHelpers для инкапсуляции вашей логики представления заключается в том, что оно также делает ваше приложение более гибким для модульного тестирования. Итак, учитывая ваш код выше, я бы использовал его в ViewHelper, например,

using System.Linq;
using System.Web.Mvc;
using System;
using System.Text;
using System.Web.Mvc.Html; //Need this for Html helper extension method

public static class GroupViewHelper
{
    public static void ShowContactInfo(this HtmlHelper helper, ModelType model)
    {
        if (model.Group.IsPremium && null != model.Group.ContactInfo)
        {
            //Do your rendering here.
        }
    }

   // ... your other ViewHelper methods here.
}

Впоследствии, где-то на ваш взгляд, я бы назвал этот вспомогательный метод примерно так:

<% Html.ShowContactInfo(Model); %>

Эта техника приводит к тому, что представления, которые избегают «супа метки», являются более удобными в обслуживании и очень легко проверяемыми.

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