c# – 面向对象编程:分离数据和行为

c# – 面向对象编程:分离数据和行为,第1张

概述最近我们在类中讨论了数据和行为分离.数据和行为分离的概念是通过将域模型及其行为放在单独的类中来实现的. 不过,我不相信这种做法的好处.即使它可能是由“伟大的”造成的(我认为是马丁福勒,虽然我不知道).我在这里提供一个简单的例子.假设我有一个Person类,它包含一个Person及其方法(行为)的数据. class Person{ string Name; DateTime Bir 最近我们在类中讨论了数据和行为分离.数据和行为分离的概念是通过将域模型及其行为放在单独的类中来实现的.
不过,我不相信这种做法的好处.即使它可能是由“伟大的”造成的(我认为是马丁福勒,虽然我不知道).我在这里提供一个简单的例子.假设我有一个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类包含数据和行为,尽管我们有一个模型对象形式的数据.
你可以说可以添加一些接口到混合,所以我们可以有IPersonService和IEmployeeService.但是,我认为为每个类引入接口并从接口继承似乎不行.
那么那么你可以告诉我,在上述情况下,通过分开数据和行为来实现这一点,我不能通过将它们放在同一个类中来实现

解决方法 实际上,Martin Fowler说,在领域模型中,数据和行为应该结合起来.看看 AnemicDomainModel. 总结

以上是内存溢出为你收集整理的c# – 面向对象编程:分离数据和行为全部内容,希望文章能够帮你解决c# – 面向对象编程:分离数据和行为所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1259538.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存