【发布时间】:2015-03-24 00:05:07
【问题描述】:
我对洋葱架构有点陌生。我创建了一个服务层,它通过手动将 DAL 中的存储库传递给构造函数来调用它们。但是现在看看我的方法,我正在使用来自核心域的对象,我想知道我是否应该传入一个接口来访问它?是否应该通过通过参数、构造函数、属性等传入的接口访问所有对象?我知道这会减少耦合,但就最佳实践而言,这意味着什么?
在我的代码中,我想知道是否
DiaryEvent diaryEvent = new DiaryEvent();
应该用作接口而不是具体对象。附言DiaryEvent 来自下面的层(核心)。
public class DiaryEventService : IDiaryEventService
{
private readonly IYogaSpaceEventRepository yogaSpaceEventRepository;
public DiaryEventService() : this(new YogaSpaceEventRepository())
{
}
public DiaryEventService(IYogaSpaceEventRepository yogaSpaceEventRepository)
{
this.yogaSpaceEventRepository = yogaSpaceEventRepository;
}
public List<DiaryEvent> LoadAllAppointmentsInDateRange(double start, double end)
{
var fromDate = ConvertFromUnixTimestamp(start);
var toDate = ConvertFromUnixTimestamp(end);
var yogaSpaceEvents = yogaSpaceEventRepository.Find(fromDate, toDate);
List<DiaryEvent> result = new List<DiaryEvent>();
foreach (var item in yogaSpaceEvents)
{
DiaryEvent diaryEvent = new DiaryEvent();
diaryEvent.ID = item.YogaSpaceEventId;
//diaryEvent.SomeImportantKeyID = item.SomeImportantKey;
diaryEvent.StartDateString = item.DateTimeScheduled.ToString("s");
// "s" is a preset format that outputs as: "2009-02-27T12:12:22"
diaryEvent.EndDateString = item.DateTimeScheduled.AddMinutes(item.AppointmentLength).ToString("s");
// field AppointmentLength is in minutes
diaryEvent.Title = item.Title + " - " + item.AppointmentLength.ToString() + " mins";
diaryEvent.StatusString = Enums.GetName<AppointmentStatus>((AppointmentStatus)item.StatusEnum);
diaryEvent.StatusColor = Enums.GetEnumDescription<AppointmentStatus>(diaryEvent.StatusString);
string ColorCode = diaryEvent.StatusColor.Substring(0, diaryEvent.StatusColor.IndexOf(":"));
diaryEvent.ClassName = diaryEvent.StatusColor.Substring(diaryEvent.StatusColor.IndexOf(":") + 1,
diaryEvent.StatusColor.Length - ColorCode.Length - 1);
diaryEvent.StatusColor = ColorCode;
result.Add(diaryEvent);
}
return result;
}
private static DateTime ConvertFromUnixTimestamp(double timestamp)
{
var origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
return origin.AddSeconds(timestamp);
}
}
【问题讨论】:
-
您可能想阅读以下内容:blog.ploeh.dk/2013/12/03/…
标签: c# asp.net-mvc dependency-injection decoupling onion-architecture