繁体   English   中英

您在哪里存储“通用”类方法?

[英]Where do you store “generic” class methods?

假设我有一个Person实体:

PERSON  
ID  
FirstName  
LastName  
SSN   
LastModifiedDate

该表存在于数据库中并且是我的.edmx文件的一部分之后,我通常为实体创建一个部分类,以用于执行某些特定于对象的工作。 例如,对于Person实体,我可能有一个UpdateLastModifiedDate()方法,该方法可以简单地将LastModifiedDate字段的值设置为所选对象的当前日期和时间。

但是,我的问题与更多“通用”方法有关,这些方法与任何特定对象都不相关。 例如,假设我想创建一个GetPersonBySSN()方法,该方法将接受SSN并返回带有该SSN的Person对象(如果存在)。 我将在哪里存储此方法?

我无法将其存储在局部类中(可以吗?),因为我必须做一些奇怪的事情,如下所示:

Person myPerson = db.Person.where(u => u.ID = 12345);
Person myPerson2 = myPerson.GetPersonBySSN(123456789);

这样做是没有意义的。

另外,我不愿意创建第二个静态类来存储这些“泛型”方法(例如PersonGenericMethods类),因为感觉我只能使用主类Person来做到这一点。

这些“通用”方法将存储在哪里?


编辑:我正在使用ASP.NET MVC,并希望就如何最好地使用此提出建议。

另外,我不愿意创建第二个类来存储这些“通用”方法(例如PersonGenericMethods类),因为感觉我应该只能使用主类Person来做到这一点。

PersonRepository类怎么样? 该类将负责与基础的Person数据存储进行交互-获取,更新,删除等。

您似乎想要的称为活动记录模式 ,其中实体类负责创建,更新和删除自身。 尽管这在Ruby之类的其他平台上更为常见,但在大多数.NET体系结构中,实体与存储库之间的分离更为常见。

您拥有的分离度(实体,存储库,业务逻辑,UI逻辑等)越多,灵活性和可重用性就越高。 但是,这是以增加复杂性为代价的。

存储库模式非常适合此操作。 请记住,您正在编程OO。 从“自己”那里得到人是很奇怪的。

存储库将获取您的数据并返回您想要的结果。

在旁注:

Person myPerson = db.Person.where(u => u.ID = 12345);
Person myPerson2 = myPerson.GetPersonBySSN(123456789);

很奇怪,首先,您得到ID = ...的人,然后作为要确保ssn是相同数字的人的函数?

您的仓库如下所示:

public class PersonRepository
{

 private readonly DBContext _myContext'
 public PersonRepository(DBContext myContext)
 { 
   _myContext = myContext; //<== Dependency INjection 
  }

  public function Person GetBySSN(int ssn)
  {
    return _myContext.FirstOrDefault(p => p.ssn = ssn);
   }
 }

看看: https : //docs.microsoft.com/zh-cn/aspnet/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/implementing-the-repository -and-单元的功图案-在-AN-ASP-净-MVC的应用程序

只是提供了良好的基础。

然后进行后续改进:是否可以研究MaybeResults类型,但是如果您不熟悉它,请:)

请享用!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM