Rich/Anemic модель

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Rich/Anemic модель — два підходи до організації архітектури моделі

Опис мовою C#[ред. | ред. код]

Rich модель являє собою чистий ООП підхід, коли дані та алгоритми знаходяться в одній моделі.

class SquareEquation
{
	public double A { get; set; }
	public double B { get; set; }
	public double C { get; set; }

	public Tuple<double, double> Solve()
	{
		var d = B * B - 4 * A * C;

		if (d < 0)
			return null;

		var x1 = (-B + Math.Sqrt(d)) / (2 * A);
		var x2 = (-B - Math.Sqrt(d)) / (2 * A);

		return new Tuple<double, double>(x1, x2);
	}
}

В Anemic моделі класи розділені на ті які зберігають дані(DTO) та алгоритми (сервісні класи).

class SquareEquation
{
	public double A { get; set; }
	public double B { get; set; }
	public double C { get; set; }
}

class SquareEquationCalculator
{
	public Tuple<double, double> Solve(SquareEquation e)
	{
		var d = e.B * e.B - 4 * e.A * e.C; 

		if (d < 0)
			return null;

		var x1 = (-e.B + Math.Sqrt(d)) / (2 * e.A);
		var x2 = (-e.B - Math.Sqrt(d)) / (2 * e.A);

		return new Tuple<double, double>(x1, x2);
	}
}


Зауваження[ред. | ред. код]

  • У більшості випадків, якщо дані складні, а алгоритми прості, тоді використовують Rich модель. Якщо дані прості, а алгоритми складні, тоді — Anemic
  • Не варто вважати, що при реалізації Rich моделі всі обчислення повинні бути в середині об'єкта предментної області. Rich також дозволяє створення сервісних класів. Просто Rich дозволяє реалізацію методів в об'єкті, а Anemic цього уникає.

Див. також[ред. | ред. код]