Скромний об'єкт (шаблон проєктування) — Вікіпедія

Скромний об'єкт (англ. Humble Object) — шаблон проєктування, який дозволяє відокремити поведінку, що легко піддається тестуванню від поведінки, яка насилу піддається тестуванню..

Опис[ред. | ред. код]

Нехай, необхідно протестувати логіку, яка важко піддається тестування, наприклад, логіку графічного інтерфейсу. Такі дані складні тому, що важко писати тести, які можуть бачити зображення на екрані і перевіряти присутність відповідних елементів. Однак насправді поведінку інтерфейсу легко тестувати, оскільки просто необхідно перевірити правильність самих елементів відображення.

Ідея шаблону у тому щоб розділити логіку на два модулі: "скромний" модуль складний для тестування, але він містить лише просту поведінку та складніший модуль, який містить тестовану поведінку.

Реалізація[ред. | ред. код]

Нехай, необхідно протестувати графічний інтерфейс.

Згідно з цим шаблоном розділимо поведінку на презентатор (Presenter) і представлення (View).

Представлення (View) - це "скромний" об'єкт, складний для тестування. Код у цьому об'єкті дуже спрощений. Він просто переносить дані у графічний інтерфейс, жодним чином не обробляючи їх.

Презентатор (Presenter) - це легко тестований об'єкт. Його завдання — отримати дані від програми і перетворити їх так, щоб Представлення (View) могло просто перемістити їх на екран.

Наприклад, якщо застосунку треба відобразити дату в певному полі, він має передати презентатору об'єкт дати.

public class HomeController {     public ActionResult Index()     {         var date = DateTime.Now;                  var presenter = new HomePresenter()         var viewModel = presenter.IndexPage(date);          return View("Index", viewModel);     } } 

Презентатор потім повинен перетворити дату на рядок і помістити її в просту структуру даних, яку називають моделлю представлення (View Model).

public class IndexViewModel {     public string DateString { get; set; }     public string DateColor { get; set; } }  public class HomePresenter {     public IndexViewModel IndexPage(DateTime dateTime)     {         return new IndexViewModel         {              DateString = dateTime.ToLongDateString(),              DateColor = dateTime.DayOfWeek == System.DayOfWeek.Sunday ? "red" : "green",         };     } } 

Тоді представлення зможе знайти і відобразити дані моделі.

@model IndexViewModel  <p>   <time style="color: @Model.DateColor">@Model.DateString</time> </p> 

Джерела[ред. | ред. код]