Во-первых, Закон Деметры, как и большинство правил программирования, является скорее принципом или руководством, и бывают случаи, когда этот принцип неприменим. При этом закон Деметры на самом деле не применим к пассивному просмотру, потому что в этом случае причина закона не является проблемой.
Закон Деметры пытается предотвратить цепочку зависимостей, например:
objectA.objectB.objectC.DoSomething();
Очевидно, что если реализация objectB изменится, чтобы вместо этого использовать objectD, это нарушит зависимость objectA и вызовет ошибку компиляции. Если дойти до крайности, вам придется делать хирургическую операцию каждый раз, когда цепочка нарушается изменением реализации.
В случае пассивного просмотра
- Презентатор зависит от интерфейса, поэтому реализация представления может меняться, пока интерфейс остается прежним.
- Представление обычно предоставляет свойства как обобщенные типы данных, такие как системные типы и коллекции. Это позволяет вам вносить изменения в пользовательский интерфейс, не затрагивая докладчика.
- Для докладчика представление выглядит не более чем структурой данных, местом для извлечения и вывода данных. Поскольку представление довольно простое, докладчик не должен даже иметь возможность выполнять цепочку зависимостей.
Таким образом, приведенный вами пример обычно реализуется:
//from presenter
view.MeaningfulName = "data";
Хотя вид будет примерно таким:
//from view
public string MeaninfulName
{
get
{
return someControl.text;
}
set
{
someControl.text = value;
}
Надеюсь, это немного проясняет ситуацию.
person
Kenneth Cochran
schedule
18.06.2009