c# – 面向对象编程:分离数据和行为
发布时间:2020-12-15 06:45:33 所属栏目:百科 来源:网络整理
导读:最近我们在类中讨论了数据和行为分离.数据和行为分离的概念是通过将域模型及其行为放在单独的类中来实现的. 不过,我不相信这种做法的好处.即使它可能是由“伟大的”造成的(我认为是马丁福勒,虽然我不知道).我在这里提供一个简单的例子.假设我有一个Person类,
最近我们在类中讨论了数据和行为分离.数据和行为分离的概念是通过将域模型及其行为放在单独的类中来实现的.
不过,我不相信这种做法的好处.即使它可能是由“伟大的”造成的(我认为是马丁福勒,虽然我不知道).我在这里提供一个简单的例子.假设我有一个Person类,它包含一个Person及其方法(行为)的数据. class Person { string Name; DateTime BirthDate; //constructor Person(string Name,DateTime BirthDate) { this.Name = Name; this.BirthDate = BirthDate; } int GetAge() { return Today - BirthDate; //for illustration only } } 现在,将行为和数据分离成单独的类. class Person { string Name; DateTime BirthDate; //constructor Person(string Name,DateTime BirthDate) { this.Name = Name; this.BirthDate = BirthDate; } } class PersonService { Person personObject; //constructor PersonService(string Name,DateTime BirthDate) { this.personObject = new Person(Name,BirthDate); } //overloaded constructor PersonService(Person personObject) { this.personObject = personObject; } int GetAge() { return personObject.Today - personObject.BirthDate; //for illustration only } } 这应该是有益的,并提高灵活性并提供松耦合.我看不到怎么样据我所知,这引入了额外的编码和性能损失,每次我们必须初始化两个类对象.我在扩展这个代码时看到更多的问题.考虑在上面介绍继承时会发生什么.我们必须继承这两个类 class Employee: Person { Double Salary; Employee(string Name,DateTime BirthDate,Double Salary): base(Name,BirthDate) { this.Salary = Salary; } } class EmployeeService: PersonService { Employee employeeObject; //constructor EmployeeService(string Name,Double Salary) { this.employeeObject = new Employee(Name,BirthDate,Salary); } //overloaded constructor EmployeeService(Employee employeeObject) { this.employeeObject = employeeObject; } } 请注意,即使我们在一个单独的类中隔离行为,我们仍然需要使用“类”类的对象来执行Behavior类方法.所以最后我们的Behavior类包含数据和行为,尽管我们有一个模型对象形式的数据. 解决方法
实际上,Martin Fowler说,在领域模型中,数据和行为应该结合起来.看看
AnemicDomainModel.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |