C# 类设计帮助

C# 类设计帮助,c#,asp.net,class-design,C#,Asp.net,Class Design,我有以下数据库表要处理,我对oop有点陌生,所以我想在这里问一下 assignment ---------- id person_id assigned_address_id position_id person ---------- person_id current_address_id name ssn drivers_license address --------- id address_number address_street address_city address_stat

我有以下数据库表要处理,我对oop有点陌生,所以我想在这里问一下

assignment
----------
id
person_id
assigned_address_id
position_id

person
----------
person_id
current_address_id
name
ssn
drivers_license

address
---------
id
address_number
address_street
address_city
address_state 
address_zip

position
---------
id
description
rate
我创建了以下类

Person Class
int? id
Address currentAddress
string Name
string ssn
string drivers_license

PersonAssignment Class
id
person_id
Address assignedAddress
Position assignedPosition 

Address Class
string address_number
string address_street
string address_city
string address_state 
int address_zip 

Position Class
int? id
string description
double payment_rate 
我还为访问Dal.Repository的每个对象创建了Seprate服务类,并对每个对象执行crud方法。 i、 e

我也有每个对象的存储库

i、 e

在我的网页上,我发现自己正在调用PersonService和PersonAssignmentService,该网页包含人员分配和人员个人详细信息

这似乎需要做很多工作。我做错什么了吗?也许有一个更简单的方法来设计这样的东西,我只是不明白

谢谢你的帮助


多亏了

数据库设计和类有时很难进行评论,其中很大一部分实际上取决于您的业务规则和您拥有的事务类型

首先,我不会为一个人的地址创建单独的表,也不会创建任何定义和地址的特定类


我不确定您使用的是哪种编程语言,但花时间查看ORM(对象关系映射)可能是值得的。

数据库设计和类有时很难评论,其中很大程度上取决于您的业务规则和事务类型

首先,我不会为一个人的地址创建单独的表,也不会创建任何定义和地址的特定类


我不确定您使用的是哪种编程语言,但可能值得您花时间查看ORM(对象关系映射)

您需要做的是设计和实现数据访问层:

这篇文章是迄今为止我所看到的最好的一篇,它描述了如何编写数据访问层。作者描述了您需要创建DTO(数据传输对象)来将数据从数据访问层移动到业务层(或者移动到另一层,在该层中数据可以转换为本机应用程序类)。他提供了基类和代码来帮助您处理数据传输对象、填充DTO的代码以及将DTO保存到数据库的代码


本系列共有三篇文章,我建议您阅读整套文章

您需要做的是设计和实现一个数据访问层:

这篇文章是迄今为止我所看到的最好的一篇,它描述了如何编写数据访问层。作者描述了您需要创建DTO(数据传输对象)来将数据从数据访问层移动到业务层(或者移动到另一层,在该层中数据可以转换为本机应用程序类)。他提供了基类和代码来帮助您处理数据传输对象、填充DTO的代码以及将DTO保存到数据库的代码


本系列共有三篇文章,我建议您阅读整套文章

我不是100%确定你的网页是做什么的,但是假设你有一个PersonAssignment Id,并且你正在从中检索PersonAssignment对象,然后是Person对象本身,那么下面的操作可能会更简单:

在PersonalAssignment类中,添加引用Person对象的属性,而不仅仅是Person_id。根据您的示例:

PersonAssignment Class
id
person_id
Person person
Address assignedAddress
Position assignedPosition

在getPersonalAssignment方法中(我假设它接受一个参数),执行一些工作来填充Person对象。您还需要添加到Insert和Update方法中才能考虑到这一点。

我不能100%确定您的网页的功能,但假设您有一个PersonAssignment Id,并且您正在从该Id检索PersonAssignment对象,然后是Person对象本身,下面的操作可能会更简单:

在PersonalAssignment类中,添加引用Person对象的属性,而不仅仅是Person_id。根据您的示例:

PersonAssignment Class
id
person_id
Person person
Address assignedAddress
Position assignedPosition

在getPersonalAssignment方法中(我假设它接受一个参数),执行一些工作来填充Person对象。您还需要添加到Insert和Update方法中才能考虑到这一点。

根据您的规则,每个人似乎只能有一个地址,因此如果有人移动,您将丢失他的最后一个地址,因为地址表中没有个人id

但是,这是吹毛求疵

如上所述,使用DAO是一个很好的主意。把逻辑分开

我将从编写DAO开始,确保它正在做它应该做的一切,然后在下一层上工作,这样您就可以对数据库进行所需的任何更改

如果您是C#新手,您可能想看看.NET3.5提供的各种工具,因为有许多更改使数据库访问更简单,从而抽象出实际的数据库


这样做的一个优点是,您的一些数据源可能来自XML文件,并且无论数据源的实际来源如何,DAO都可以正常工作。

根据您的规则,每个人似乎只能有一个地址,因此如果有人移动,您将丢失他的最后一个地址,因为地址表中没有个人id

但是,这是吹毛求疵

如上所述,使用DAO是一个很好的主意。把逻辑分开

我将从编写DAO开始,确保它正在做它应该做的一切,然后在下一层上工作,这样您就可以对数据库进行所需的任何更改

如果您是C#新手,您可能想看看.NET3.5提供的各种工具,因为有许多更改使数据库访问更简单,从而抽象出实际的数据库


这样做的一个优点是,您的一些数据源可能来自XML文件,无论数据源的实际来源如何,DAO都可以正常工作。

听起来您是在一个由其他人设计的框架内工作,在这个框架中,您拥有服务类、存储库和DAL,现在
PersonAssignment Class
id
person_id
Person person
Address assignedAddress
Position assignedPosition