gpt4 book ai didi

c# - CustomType 对 FluentNHibernate 的引用

转载 作者:行者123 更新时间:2023-11-30 15:52:24 24 4
gpt4 key购买 nike

我正在使用一个名为 LanguageExt 的库.这个库提供了一些工具来处理 C# 代码中的函数式编程。我还使用 FluentNHibernate 将我的域类映射到我的数据库。

当属性可为空时,我想使用 Option<T>来自 LanguageExt。它是一个包含值或等于 None 的结构。

我的类(class)模特之一,说Car有一个可选属性,比如 Sunroof这是类型 Option<Window> .像这样:

public class Car
{
Window _sunroof;
Option<Window> Sunroof
{
get => Optional(_sunroof);
set => _sunroof = value.IfNoneUnsafe(() => null);
}
}

我的映射是这样的:

References<Window>(x => x.Sunroof, "idSunroof")
.Not.Nullable();

我的问题是:如何使用其支持字段映射 Sunroof 属性,知道它们不共享相同的返回类型?

最佳答案

It's a domain model but also mapped to some table in the database via the mapping configuration done by FluentNHibernate.

我不认为这是个好主意。你正试图在这门课上做三件(或四件)我会分开的事情。

我建议为 NHibernate 使用一个 DTO(可能称为 CarDto)和一个业务模型(可能称为 Car)。这样,CarDto 可以因为与数据库相关的原因而改变(但不是因为建模原因),Car 可以因为建模原因而改变(但不是因为数据库原因)。例如,函数式编程的业务模型是不可变的,但 NHibernate 可能要求其 DTO 是可变的。如果您为这两个目的使用相同的类型,那么您将无法满足所有的设计约束。

how do I map the Sunroof property using its backing field knowing that they don't share the same return type?

我认为您不应该拥有不同类型的属性和支持字段。对于 CarDto,使用 null 表示缺少 Window。然后当从CarDto映射到Car时,将null映射到None状态(通过Optional 您当前正在使用的函数)。然后当从 Car 映射到 CarDto 时,将 None 映射回 null (通过 IfNoneUnsafe 您当前正在使用的方法)。

你的汽车

  1. 是 NHibernate 的 DTO,
  2. 是您的商业模式,
  3. 包含从 DTO 到业务模型的映射,以及
  4. 包含从业务模型到 DTO 的映射。

这就是我上面提到的三四件事(取决于你把映射算作一件事还是两件事)。

添加于 2019-02-20

[your answer is] not a solution to my problem but a proposal for a better architecture

两者兼而有之。

I fully agree with what you said and I would be very happy to do that but I can't. In my code base I have more than 250 model classes which are quite badly designed and with a lot of wrongly made dependencies. I can't afford to refactor all of that at once.

我并不是建议您立即更改所有内容。离得很远。风格Refactoring作者 Martin Fowler,我建议随着时间的推移进行许多小的更改。

例如,将Car改成

会有多难
public class Car
{
Option<Window> Sunroof
{
get => Optional(SunroofBacking);
set => SunroofBacking = value.IfNoneUnsafe((Window) null);
}
Window SunroofBacking { get; set; }
}

并出于业务逻辑原因使用(“更好”命名的)属性 Sunroof 并出于 NHibernate 原因使用 SunroofBacking

关于c# - CustomType 对 FluentNHibernate 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54747437/

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