相关疑难解决方法(0)

如何使数据绑定类型安全并支持重构

当我希望将控件绑定到我的对象的属性时,我必须提供属性的名称作为字符串.这不是很好,因为:

  1. 如果删除或重命名该属性,我不会收到编译器警告.
  2. 如果使用重构工具重命名该属性,则很可能不会更新数据绑定.
  3. 如果属性的类型错误,我在运行时之前不会收到错误,例如将整数绑定到日期选择器.

是否有一个设计模式可以解决这个问题,但仍然易于使用数据绑定?

(这是WinForm,Asp.net和WPF中的一个问题,很可能是很多其他系统)

我现在已经找到了" C#中的nameof()运算符的变通方法:typesafe databinding ",它也是解决方案的一个很好的起点.

如果您在编译代码后愿意使用后处理器,那么notifypropertyweaver非常值得关注.


当绑定在XML而不是C#中完成时,任何人都知道WPF的良好解决方案吗?

.net c# data-binding refactoring type-safety

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

对于具有外部set/get方法的强类型类成员,是否有C#模式?

我有以下结构,并希望解决方案同时受益于以下两个类.第一个类使用字符串和强类型成员:

public class UserSessionData
{
    private string Get(string key)
    {
        throw new NotImplementedException("TODO: Get from external source");
    }
    private void Set(string key, string value)
    {
        throw new NotImplementedException("TODO: Set in external source");
    }

    public string CustomerNumber {
        get { return Get("CustomerNumber"); }
        set { Set("CustomerNumber", value); }
    }
    public string FirstName {
        get { return Get("FirstName"); }
        set { Set("FirstName", value); }
    }
    public string LastName {
        get { return Get("LastName"); }
        set { Set("LastName", value); }
    }

    // ... …
Run Code Online (Sandbox Code Playgroud)

.net c# c#-4.0

20
推荐指数
2
解决办法
1318
查看次数

验证策略

我有一个包含许多类的业务模型,这个模型中的一些逻辑实体由许多不同的类组成(父子孙.)在这些不同的类中,我定义了不变的约束,例如复合的根应该有代码的值.

我目前每个类都实现了这样的接口......

public interface IValidatable
{
    IEnumerable<ValidationError> GetErrors(string path);
}
Run Code Online (Sandbox Code Playgroud)

如果未设置Code,则父级将添加验证错误,然后对每个子级执行GetErrors,这反过来会在每个子级上调用GetErrors.

现在,我需要为不同的操作验证不同的约束

  1. 应始终检查某些约束,因为它们是不变的
  2. 当我想在根上执行操作X时,应该检查一些约束.
  3. 执行操作Y时可能会检查一些其他约束.

我曾考虑在GetErrors方法中添加一个"Reason"参数,但由于某种原因,我无法完全理解这一点并不合适.我还考虑过创建一个访问者并有一个具体的实现来验证OperationX和另一个针对OperationY但不喜欢这个,因为一些约束检查需要多个操作但不是所有操作(例如,OperationX + OperationY需要一个Date但不是OperationZ)我不想复制检查的代码.

任何建议,将不胜感激.

c# design-patterns

9
推荐指数
1
解决办法
7135
查看次数