用层次结构继承模型

发布于 2025-02-04 11:13:05 字数 2348 浏览 1 评论 0原文

我使用c#(但不管没有)并具有以下模型:

public abstract class SuspensionRequestCreatedBaseDto
{
    public int RequestId { get; set; }
    public string DeviceIMEI { get; set; }
    public string DeviceName { get; set; }
}

public class SuspensionRequestCreatedExpirationTimeDto : SuspensionRequestCreatedBaseDto
{
    public DateTime? LastActive { get; set; }
    public DateTime ApprovePlannedDateTime { get; set; }
}

public class SuspensionRequestCreatedReachDataLimitDto : SuspensionRequestCreatedBaseDto
{
    public int DataUsedMb { get; set; }
}

我将这些类用于我的服务库,因此,有常见的DTO类,

但是对于一个UI项目,我需要具有以下逻辑:

public abstract class SuspensionRequestCreatedBaseDto
{
    public int RequestId { get; set; }
    public string DeviceIMEI { get; set; }
    public string DeviceName { get; set; }

    public virtual string PrepareEmailPart(string body)
    {
        // logic 1 (base logic)
    }
}

public class SuspensionRequestCreatedExpirationTimeDto : SuspensionRequestCreatedBaseDto
{
    public DateTime? LastActive { get; set; }
    public DateTime ApprovePlannedDateTime { get; set; }

    public override string PrepareEmailPart(string body)
    {
        // logic 2
    }
}

public class SuspensionRequestCreatedReachDataLimitDto : SuspensionRequestCreatedBaseDto
{
    public int DataUsedMb { get; set; }

    public override string PrepareEmailPart(string body)
    {
        // logic 3
    }
}

然后只需调用请求请求。但是我无法将这些特定的东西(UI事物)添加到我用于服务的核心库中。

我试图这样实施:

public class SuspensionRequestCreatedBaseModel
{
    public virtual SuspensionRequestCreatedBaseDto SuspensionRequest { get; set; }

    public virtual string PrepareEmailPart(string body)
    {
         // base logic
    }
}

public class SuspensionRequestCreatedExpirationTimeModel : SuspensionRequestCreatedBaseModel
{
    public override SuspensionRequestCreatedExpirationTimeDto SuspensionRequest {get; set;}

    public override string PrepareEmailPart(string body)
    {
        // logic 2
    }
}

但是我得到了

'suspensionRequestCreatedExpirationTimeModel.SuspensionRequest': 类型必须是“悬挂QuestCreatedBasedto”才能匹配被覆盖的 成员 'suspensionRequestCreatedBaseModel.SuspensionRequest'

如何正确实施它,没有案例>案例 antipattern,而不将不必要的UI事物与核心进行混合?

I use c# (but no matter) and have the following model:

public abstract class SuspensionRequestCreatedBaseDto
{
    public int RequestId { get; set; }
    public string DeviceIMEI { get; set; }
    public string DeviceName { get; set; }
}

public class SuspensionRequestCreatedExpirationTimeDto : SuspensionRequestCreatedBaseDto
{
    public DateTime? LastActive { get; set; }
    public DateTime ApprovePlannedDateTime { get; set; }
}

public class SuspensionRequestCreatedReachDataLimitDto : SuspensionRequestCreatedBaseDto
{
    public int DataUsedMb { get; set; }
}

I use these classes for my Services libraries, so, there are common DTO classes

But for one UI project I need to have the following logic:

public abstract class SuspensionRequestCreatedBaseDto
{
    public int RequestId { get; set; }
    public string DeviceIMEI { get; set; }
    public string DeviceName { get; set; }

    public virtual string PrepareEmailPart(string body)
    {
        // logic 1 (base logic)
    }
}

public class SuspensionRequestCreatedExpirationTimeDto : SuspensionRequestCreatedBaseDto
{
    public DateTime? LastActive { get; set; }
    public DateTime ApprovePlannedDateTime { get; set; }

    public override string PrepareEmailPart(string body)
    {
        // logic 2
    }
}

public class SuspensionRequestCreatedReachDataLimitDto : SuspensionRequestCreatedBaseDto
{
    public int DataUsedMb { get; set; }

    public override string PrepareEmailPart(string body)
    {
        // logic 3
    }
}

then just call request.PrepareEmailPart(...) without checking type of Dto class. But I can't add such specific things (UI things) to Core library, which I use for Services.

I try to implement it like:

public class SuspensionRequestCreatedBaseModel
{
    public virtual SuspensionRequestCreatedBaseDto SuspensionRequest { get; set; }

    public virtual string PrepareEmailPart(string body)
    {
         // base logic
    }
}

public class SuspensionRequestCreatedExpirationTimeModel : SuspensionRequestCreatedBaseModel
{
    public override SuspensionRequestCreatedExpirationTimeDto SuspensionRequest {get; set;}

    public override string PrepareEmailPart(string body)
    {
        // logic 2
    }
}

but I get

'SuspensionRequestCreatedExpirationTimeModel.SuspensionRequest':
type must be 'SuspensionRequestCreatedBaseDto' to match overridden
member
'SuspensionRequestCreatedBaseModel.SuspensionRequest'

How to implement it correctly, without case antipattern and without mixing unnecessary UI things to Core?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文