gpt4 book ai didi

c# - 可用于多个项目的变量

转载 作者:太空宇宙 更新时间:2023-11-03 21:43:31 25 4
gpt4 key购买 nike

我有一个 ASP.Net 应用程序,其 UI 层连接到服务层,连接到业务层并向下连接到数据访问层。

层的类有构造函数,它接受一个 UserId (int)。这主要用于日志记录,以及诸如“LastUpdateUser 和 CreateUser”之类的存储。

我正在跨时区工作,在我的用户表中,我有一个 TimeZoneId。在 UI 级别,这存储在 session 状态中,然后我可以根据时区操作日期。

我可以在我的服务层中创建一个方法,“GetTimezoneByUser”并向它传递一个用户 ID,然后向下传递到数据访问层,并获取时区信息。

我遇到的问题是在我的数据传输对象中,我有一些逻辑,它使用基于时间的信息:

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 "";
}
}

我认为我需要的是某种类,我的所有层都可以访问它,它有一个公共(public) TimeZoneId,如果它为空,则通过数据访问器类从数据库中获取它。但是我需要在我的数据访问器中引用这个项目。

可以在 DTO 类中引用项目吗?它们本来就是轻量级的。是否有另一个我可以存储时区的“状态”,所有层都可以访问它?最后也是最糟糕的选择是将 ZimeZoneID 与 UserId 一起传递——这是我对所有构造函数所做的方式。但这似乎是个坏主意。

最佳答案

问题在于您的 DTO 类包含业务逻辑。将代码移动到在适当的抽象级别上运行的层,并计算“AvailableToday”属性值。 DTO 对象应该是普通数据对象。

关于c# - 可用于多个项目的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18220862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com