Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 领域驱动设计问题_C#_.net_Domain Driven Design - Fatal编程技术网

C# 领域驱动设计问题

C# 领域驱动设计问题,c#,.net,domain-driven-design,C#,.net,Domain Driven Design,我有一个需要建议的场景。我有一个应用程序,其中有两种用户:学生和教师。学生和教师共享一些公共属性,如名字、姓氏、电子邮件、用户名、密码等。因此,我从用户派生学生和教师类 现在的问题是,有时我真的不知道用户是学生还是老师。与实现自定义成员资格提供程序和GetUser函数类似。GetUser使用用户名,但现在我丢失了该返回的内容 对于学生函数,我为教师创建了IStudent和iTacher。但有时我只想返回一个用户,而不关心他是学生还是老师。但是,返回基类似乎也不是一个好主意 更新: 我认为返回用户

我有一个需要建议的场景。我有一个应用程序,其中有两种用户:学生和教师。学生和教师共享一些公共属性,如名字、姓氏、电子邮件、用户名、密码等。因此,我从用户派生学生和教师类

现在的问题是,有时我真的不知道用户是学生还是老师。与实现自定义成员资格提供程序和GetUser函数类似。GetUser使用用户名,但现在我丢失了该返回的内容

对于学生函数,我为教师创建了IStudent和iTacher。但有时我只想返回一个用户,而不关心他是学生还是老师。但是,返回基类似乎也不是一个好主意

更新:


我认为返回用户是个好主意,甚至不需要学生和老师上课。学生和教师只是角色,可以由StudentServices和TeacherServices管理

一个经典的场景,一个典型的逃离问题的场景。是的,当继承受到约束时,处理继承总是很痛苦的。但是,当您将行为注入到类中时,就会产生好处。现在,您似乎已经决定使用用户类,而不是将用户作为基础和子类的教师和学生。如果你将教师和学生作为角色,但在单独的服务中处理他们,这可能是一个好主意。。。嗯,我的意见是这样的。由于这些服务都需要处理用户逻辑,因此最终很可能会出现重复的代码

事实上,如果您开始通过在服务层中进行补偿来避开这样的困难,那么这就是通向一个贫乏的域模型的道路,在这个模型中,逻辑从域层泄漏到gui或服务层。 教师和学生的独特之处以及逻辑/行为的不同之处应在域层中表示


您可以使用继承(也许是最好的解决方案),或者将它们作为一个角色,而实际上您可以将角色作为一个自定义枚举-请看(我认为)Jimmy Bogard,了解如何使用行为扩展自定义枚举。

一个经典场景和一个经典的逃避问题的例子。是的,当继承受到约束时,处理继承总是很痛苦的。但是,当您将行为注入到类中时,就会产生好处。现在,您似乎已经决定使用用户类,而不是将用户作为基础和子类的教师和学生。如果你将教师和学生作为角色,但在单独的服务中处理他们,这可能是一个好主意。。。嗯,我的意见是这样的。由于这些服务都需要处理用户逻辑,因此最终很可能会出现重复的代码

事实上,如果您开始通过在服务层中进行补偿来避开这样的困难,那么这就是通向一个贫乏的域模型的道路,在这个模型中,逻辑从域层泄漏到gui或服务层。 教师和学生的独特之处以及逻辑/行为的不同之处应在域层中表示


您可以使用继承(也许是最好的解决方案),或者将它们作为一个角色,而实际上将角色作为一个自定义枚举-请看(我认为)Jimmy Bogard,了解如何使用行为扩展自定义枚举。

为什么返回User类型的对象是一个坏主意?这似乎是合乎逻辑的解决方案——特别是对getUser()的调用;看我更新的问题!你在寻找一种特定语言的答案吗?有些语言有一个getClass(Object)帮助程序,或者像ObjectA.isA(Student).C#和.netframework这样的操作符!在这一点上,我很乐意说用户应该是唯一的类,StudentService和TeacherService可以用来对用户执行不同的操作。为什么返回User类型的对象是个坏主意?这似乎是合乎逻辑的解决方案——特别是对getUser()的调用;看我更新的问题!你在寻找一种特定语言的答案吗?有些语言有一个getClass(Object)帮助程序,或者像ObjectA.isA(Student).C#和.netframework这样的操作符!在这一点上,我很乐意说用户应该是唯一的类,StudentService和TeacherService可以用于对用户执行不同的操作。