Скромний об'єкт (шаблон проєктування) — Вікіпедія
Скромний об'єкт (англ. 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>
Джерела[ред. | ред. код]
- Humble Object pattern [Архівовано 27 вересня 2020 у Wayback Machine.]
- Humble Object Pattern for UIViewController