Накопичувач (шаблон проєктування) — Вікіпедія
Накопичувач (англ. Collecting Parameter) — шаблон проєктування, який пропонує накопичувати повідомлення про стан об'єкту.
Реалізація[ред. | ред. код]
Нехай, необхідно показувати повідомлення про зміну стану об'єкту. Оскільки наперед не відомо середовище розгортання даного об'єкту, накопичуватимемо повідомлення в пам'яті, а відповідальність відображення реалізуємо в залежності від середовища.
typedef vector<string> CollectingParameter; struct Filler { void f(CollectingParameter& cp) { cp.push_back("accumulating"); // Do something else } void g(CollectingParameter& cp) { cp.push_back("items"); // Do something else } void h(CollectingParameter& cp) { cp.push_back("as we go"); // Do something else } }; void main() { Filler filler; CollectingParameter cp; filler.f(cp); filler.g(cp); filler.h(cp); // вивід повідомлень залежить від середовища, наприклад, у консоль // вебсервер міг би показувати дані у вигляді сторінки, тощо for (vector<string>::iterator it = cp.begin(); it != cp.end(); ++it) { cout << *it << ' '; } }
Даний шаблон може бути корисний, коли необхідно виконати відкладену валідацію.
public class HomeController { public ActionResult Index(string value) { if(string.IsNullOrEmpty(value)) { ModelState.AddModelError("value", "There is something wrong with value."); } . . . IEnumerable<ModelError> allErrors = ModelState.Values.SelectMany(v => v.Errors); . . . } }
Одна із різновидностей цього шаблону передбачає для накопичення повідомлень використовувати властивості, а не структуру даних.