我有以下数据库表可供使用,我对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 Service Classes,并对每个对象执行crud方法。 即。
PersonService Class
Update(Person p)
Insert(Person p)
GetListOfPeople()
GetPerson()
PersonAssignmentService Class
Update(PersonAssignment p)
Insert(PersonAssignment p)
GetListOfPeopleAssignments()
GetAssignment()
我还有每个对象的存储库
即
PersonRepository Class
Update(PersonAssignment p)
Insert(PersonAssignment p)
GetListOfPeopleAssignments()
GetAssignment()
在我的网页上,其中包含人员分配和个人详细信息,我发现自己称之为PersonService和PersonAssignmentService。
这似乎很多工作。难道我做错了什么?也许有一种更简单的方法来设计这样的东西,我只是没有得到它。
感谢您的帮助
由于
答案 0 :(得分:1)
您需要做的是设计和实施数据访问层:
http://rlacovara.blogspot.com/2009/02/high-performance-data-access-layer.html
这篇文章是我迄今为止所描述的如何编写数据访问层的最佳文章。作者描述了您需要创建DTO(数据传输对象)以将数据从数据访问层移动到业务层(或转移到可以转换为本机应用程序类的另一层)。他提供基类和代码来帮助您使用数据传输对象,填充DTO的代码以及将DTO保存到数据库的代码。
系列中有三篇文章,我建议阅读整套文章。
答案 1 :(得分:0)
数据库设计和类有时很难批评,其中很大一部分实际上取决于您的业务规则和您拥有的交易类型。
对于初学者,我不会有一个人的地址单独的表,我不会创建任何定义和地址的特定类。
我不确定您使用的是哪种编程语言但是可能值得您花时间查看ORM(对象关系映射)
答案 2 :(得分:0)
我不是百分之百确定你的网页是做什么的,但假设你有一个PersonAssignment Id并且你从那里检索一个PersonAssignment对象,然后是Person对象本身,下面的内容可能会更容易:
在PersonAssignment类中,添加引用Person对象的属性,而不仅仅是person_id。从你的例子:
PersonAssignment Class
id
person_id
Person person
Address assignedAddress
Position assignedPosition
在GetPersonAssignment方法(我假设接受一个参数)中,做一些工作来填充Person对象。您还需要添加插入和更新方法以将此考虑在内。
答案 3 :(得分:0)
根据您的规则,每个人只能拥有一个地址,所以如果有人移动,您将失去他的最后一个地址,因为地址表中没有person_id。
但是,这是挑剔。
如上所述,使用DAO是一个很好的主意。保持逻辑分离。
我将从编写DAO开始,确保它正在执行它应该执行的所有操作,然后处理下一层,这样就可以对所需的数据库进行任何更改。
如果您不熟悉C#,您可能需要查看.NET 3.5提供的各种工具,因为有许多更改可以简化数据库访问,以抽象出实际的数据库。
这样做的一个优点是,您的某些数据源可能来自XML文件,无论数据源的实际来源如何,您的DAO都能正常工作。
答案 4 :(得分:0)
听起来你是在一个由其他人设计的框架中工作,你有服务类,存储库和DAL,现在你已经拥有了所有这些东西,你正在查看大量的代码和问“不是一种更简单的方法”。简短的回答是肯定的,总有一种更简单的方法。进行数据访问的方式与开发人员一样多。您使用的模型相当复杂,听起来遵循域驱动设计的原则。 DDD是一种很好的方法,它提供了极好的关注点分离和高可测性。但它也需要大量的管道代码,并且大多数.Net程序员都不太了解它,所以获得帮助可能很难。我认为这是构建企业应用程序的最佳方式,但如果您不熟悉OOP,它不是最适合您的模型。
如果你正在做一个小项目,你可能想要考虑完全绕过BLL,没有服务类,没有存储库,只有一个包含你的实体类的Common Lib /项目,并构建一个包含数据访问方法的DLL直接填充并保存您的实体。
更简单的方法是取消实体类,只让你的DLL返回包含实体数据的ADO.Net DataTables。这种方法失去了实体类的强类型,但实现起来要容易得多。
另一种方法是使用Entity Framework。 EF将为您完成所有这些工作,它将生成强类型实体类。习惯EF需要一段时间,但一旦理解了如何使用它,它就可以大大减少编写持久性代码所需的时间。有关EF的一些好的教程,请查看Rob Bagby's blog