小编Adr*_*tov的帖子

在DDD中具有单独的域模型和持久性模型

我一直在阅读有关域驱动设计以及如何使用代码优先方法生成数据库的方法.根据我的阅读和研究,围绕这个主题有两种观点:

  1. 有1个类同时用作域模型和持久性模型

  2. 有2个不同的类,一个实现域逻辑,一个用于代码优先方法

现在我知道意见1)据说简化了在域和持久性模型之间没有太多差异的小解决方案,但我认为它打破了单一责任原则,并且当ORM的约定干扰DDD时引入了许多问题.

令我感到意外的是,有很多关于如何实现意见的代码示例1).但是还没有找到一个如何实现意见的例子2)以及如何映射这两个对象.(可能有这样的例子,但我找不到C#)

所以我试着自己实现一个例子,但我不确定这是不是一个很好的方法.

假设我有一个票务系统,票证有到期日.我的域名模型如下所示:

/// <summary>
/// Domain Model
/// </summary>
public class TicketEntity
{
    public int Id { get; private set; }

    public decimal Cost { get; private set; }

    public DateTime ExpiryDate { get; private set; }

    public TicketEntity(int id, decimal cost, DateTime expiryDate)
    {
        this.Id = id;
        this.Cost = cost;
        this.ExpiryDate = expiryDate;
    }

    public bool IsTicketExpired()
    {
        if (DateTime.Now > this.ExpiryDate)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

使用Entity …

c# architecture orm domain-driven-design domain-model

46
推荐指数
2
解决办法
5832
查看次数

你如何制作菜单项(JMenuItem)的快捷方式?

所以我注意到在awt中有一个MenuItem构造函数用于添加CTRL+(某些键)快捷方式,但是没有这样的构造函数JMenuItem.这样做的正确方法是什么?

我需要一个平等的awt:

MenuItem mi = new MenuItem("Copy", new MenuShortcut(KeyEvent.VK_C));
Run Code Online (Sandbox Code Playgroud)

但对于Swing.

java swing shortcut jmenuitem

18
推荐指数
2
解决办法
2万
查看次数

如何忽略标记为虚拟的所有属性

我使用virtual关键字为我的一些属性EF延迟加载.我有一个案例,virtual在将源映射到目标时,应该从AutoMapper中忽略我的模型中标记为的所有属性.

是否有自动方式可以实现此目的,还是应该手动忽略每个成员?

.net c# automapper

8
推荐指数
2
解决办法
4250
查看次数

将通用接口的实现分配给属性

我有一个界面

public interface IStrategy<T> where T : BaseModel
{
    T GetModel(Guid userId);
}
Run Code Online (Sandbox Code Playgroud)

和一个继承接口的具体类,指定它应该是一个 ConcreteModel

 public class ConcreteStrategy: IStrategy<ConcreteModel>
 {
     ConcreteModel GetModel(Guid userId) { ... }
 }
Run Code Online (Sandbox Code Playgroud)

现在在下面的方法中,我可以传递一个新的实例,ConcreteStrategy一切正常

 public class Manager
 {
    public TModel GetContentModel<TModel>(IStrategy<TModel> strategy, Guid userId)
        where TModel : ModelBase
    {
        return strategy.GetContentModel(userId);
    }
 }
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试将它分配给这样的属性,我会收到错误

public class Strategies
{
    public static IStrategy<ModelBase> MyStrategy { get; set; }
}

Strategies.MyStrategy = new ConcreteStrategy();
Run Code Online (Sandbox Code Playgroud)

有没有办法在C#中实现这一目标?我希望能够创建一个工厂方法来封装使用策略的逻辑,并返回某种类型的策略类的实例(如ConcreteStrategy).

我得到的错误是:

无法隐式转换IStrategy<ModelBase>IStrategy<ConcreteModel>

.net c# generics

4
推荐指数
1
解决办法
73
查看次数