我有一个 ASP.Net 应用程序,其设计的 UI 层连接到服务层、连接到业务层并向下连接到数据访问层。
层的类有构造函数,它接受一个 UserId (int)。这主要用于日志记录,以及诸如“LastUpdateUser 和 CreateUser”存储之类的东西。
我正在跨时区工作,在我的用户表中,我有一个 TimeZoneId。在 UI 级别,它存储在会话状态中,然后我可以根据时区操作日期。
我可以在我的服务层中创建一个方法“GetTimezoneByUser”并将其传递给一个 userId,然后将这些层向下传递到数据访问层,并获取时区信息。
我遇到的问题是,在我的数据传输对象中,我有一些逻辑,它使用基于时间的信息:
public class PersonDto
{
public int Id { get; set; }
public string Firstname { get; set; }
public string Surname { get; set; }
public decimal GrossSalary { get; set; }
public string Email { get; set; }
public bool Deleted { get; set; }
public List<PersonNonAvailibilityDto> NonAvailibility { get; set; }
public string FullName
{
get { return string.Format("{0} {1}", Firstname, Surname); }
}
public string AvailableToday
{
get
{
if (NonAvailibility != null)
{
var i = NonAvailibility.FirstOrDefault(t => DateTime.UtcNow.Date <= t.EndDate && DateTime.UtcNow.Date >= t.StartDate);
if (i != null) return i.NonAvailibilityType ;
return "";
}
return "";
}
}
我认为我需要的是某种类,我的所有层都可以访问它,它有一个公共的 TimeZoneId,如果它为空,则通过数据访问器类从数据库中获取它。但是我需要在我的数据访问器中引用这个项目。
可以在 DTO 类中引用项目吗?它们应该是轻量级的。是否有另一个“状态”可以存储时区,所有图层都可以访问?最后也是最糟糕的选择是将 ZimeZoneID 与 UserId 一起传递——就像我对所有构造函数所做的那样。但这似乎是个坏主意。