Нехай, необхідно змоделювати об'єкт користувача, для якого можлива зміна імені. Наївна реалізація виглядатиме наступним чином:
// об'єкт містить лише дані, поведінка назовні
public class User
{
public string Name { get; set }
}
// використання
var user = new User();
user.Name = "New user name";
RaiseEvent(new UserNameChanged(user.Name));
Змінимо код згідно з цим принципом.
// об'єкт містить як дані, так і поведінку
public class User
{
private string _name;
public void ChangeName(string name)
{
_name = name;
RaiseEvent(new UserNameChanged(name));
}
}
// використання
var user = new User();
user.ChangeName("New user name");