我有10个代码块,彼此相似。
其中两个如下:
[OperationContract]
public IEnumerable<HaemogramReport> GetHaemogramReports(int patientId)
{
using (Lab_Lite_Entities db = new Lab_Lite_Entities())
{
var result = db.HaemogramReports.Where(h => h.Patients.Any(p => p.PatientID == patientId)).ToList();
result.ForEach(h => ((IObjectContextAdapter)db).ObjectContext.Detach(h));
return result;
}
}
[OperationContract]
public IEnumerable<UrineAnalysis> GetUrineAnalysises(int patientId)
{
using (Lab_Lite_Entities db = new Lab_Lite_Entities())
{
var result = db.UrineAnalysises.Where(u => u.Patients.Any(p => p.PatientID == patientId)).ToList();
result.ForEach(u => ((IObjectContextAdapter)db).ObjectContext.Detach(u));
return result;
}
}
第一种方法包含db.HaemogramReports
,第二种方法包含db.UrineAnalysises
。除了每件事情都相似之外。这是所有十种方法的类似行为。那么,我如何重新格式化我的代码以避免重复呢?
答案 0 :(得分:2)
这不是一个完整的答案。
对于10个案例,这可能不值得。
但是你可以做一些为“有病人名单的事情”定义界面的事情。为具有患者列表的实体创建另一个类部件,以强制他们实现界面。然后你可以编写一个泛型方法,它采用IEnumerable<T>
定义T来实现接口。然后,该方法可以在患者列表中执行谓词。