相关疑难解决方法(0)

反竞选活动

我最近遇到了一个非常有趣的网站,表达了一个非常有趣的想法 - 反竞选活动.您可以在www.antiifcampaign.com上看到这一点.我必须同意复杂的嵌套IF语句是后方的绝对痛苦.我目前正在进行一个项目,直到最近才有一些疯狂的嵌套IF向右滚动相当多的方式.我们以两种方式解决了问题 - 我们使用Windows Workflow Foundation来解决路由(或工作流程)问题.我们正在利用ILOG Rules for .NET(最近由IBM购买!!)实施所有业务规则.这在很大程度上已经治愈了我们的嵌套IF痛苦...但我发现自己想知道有多少人以AntiIfCampaign的优秀人士建议的方式(通过这里看到一个例子)通过创建大量抽象类来解决他们的痛苦表示最初由嵌套IF覆盖的给定方案.我想知道解决这种复杂性的另一种方法是否也可能是使用诸如StructureMap之类的IoC容器来移入和移出不同的功能.无论哪种方式...

问题: 给定一个场景,我有一个嵌套的复杂IF或SWITCH语句,用于评估给定类型的事物(比如评估一个枚举),以确定我想如何通过枚举类型处理该事物的处理 - 有什么一些如何在不使用IF或SWITCH分层结构的情况下进行相同形式的处理?

public enum WidgetTypes
{
    Type1,
    Type2,
    Type3,
    Type4
}

...

WidgetTypes _myType = WidgetTypes.Type1;

...

switch(_myType)
{
    case WidgetTypes.Type1:
        //do something
        break;

    case WidgetTypes.Type2:
        //do something
        break;

    //etc...
}
Run Code Online (Sandbox Code Playgroud)

design-patterns

29
推荐指数
8
解决办法
1万
查看次数

动态地将成员添加到动态对象

我正在寻找一种动态添加成员动态对象的方法.好的,我想需要一点澄清......

当你这样做:

dynamic foo = new ExpandoObject();
foo.Bar = 42;
Run Code Online (Sandbox Code Playgroud)

Bar属性将在运行时动态添加.但代码仍然"静态"引用Bar(名称"Bar"是硬编码的)...如果我想在运行时添加属性而不知道它在编译时的名称怎么办?

我知道如何使用类的方法使用自定义动态对象(我实际上是几个月前的博客)DynamicObject,但是如何使用任何动态对象?

我可以使用IDynamicMetaObjectProvider界面,但我不明白如何使用它.例如,我应该将哪个参数传递给GetMetaObject方法?(它期待一个Expression)

顺便说一句,你如何对动态对象进行反射?"定期"反思TypeDescriptor并不显示动态成员......

任何见解将不胜感激!

reflection dynamic-language-runtime dynamic .net-4.0 c#-4.0

8
推荐指数
3
解决办法
3651
查看次数

在asp.net中创建动态表单c#

所以,我需要一些输入重构一个asp.net(c#)应用程序,它基本上是一个用于创建动态表单(任何表单)的框架.从高层的角度来看,有一个表格有表格,然后有一个表格,其中包含所有表格字段,两者之间是一对多.有一个验证表,其中每个字段可以有多种类型的验证,从表单字段表到验证表是一对多.

所以问题是这个应用程序已经作为所有客户端的所有可定制解决方案出售.所以,这个想法是他们想要的任何形式,我们可以使用数据库配置来构建它.问题是,这并不总是可行的,因为字段之间存在复杂的关系,而且表单本身之间存在复杂的关系.此外,只有一次代码库,这适用于多个客户端 - 所有客户端都是自己托管的.每个客户端都有非常特定的逻辑,它们在同一个代码库中是ALL,没有真正的分离.有时候将它设置为通用是太困难了,因此有些情况下它具有硬编码逻辑(如果formID = XXX则执行_).您还可以在每个表单中拥有嵌套表单,例如,一组字段.

通常,当一个客户端请求更改时,我们进行更改并将其部署到该客户端 - 但是然后另一个客户端请求不同的更改,我们进行更改并将其部署到该客户端,但是从早期客户端的更改中断它是一个令人头疼的尝试调试,因为一切都是动态的.我们无法回滚早期的更改,因为那时其他客户端将被搞砸.

它不是在真正的3层架构中完成的 - 它是一个引用数据库类的网站,以及一个类库.网站本身,类库中存在业务逻辑,数据库存储过程(验证在存储过程中完成).

我一直负责重新组织整个事情,这些是我的想法/问题:

  1. 我认为这通常是一个糟糕的模型,因为我听到其中一位开发人员说过的一件事是,任何客户都做出改变,我们应该部署给所有人 - 但如果我们说20个客户,这是不现实的 - 需要对一切进行回归测试,因为我们不知道影响......

  2. 总共有大约100种形式,它们之间有一些相似之处(不多).但我认为动态引擎可以解决所有表单请求的想法也不现实.客户提出了最奇怪的要求.例如,他们使用此引擎执行常规数据输入表单和搜索表单.

  3. 页面之间有很多保留状态,并且它都是使用会话变量完成的,这是好的,除了它没有被真正跟踪,因此来自同一用户的会话不断被覆盖,我认为会话应该被删除的.

  4. 我真的应该重写整件事吗?这个应用程序大约3岁,已经进行了大量的测试和事情,并且实施了严格的业务逻辑,所以我讨厌摆脱所有这些(joel的建议).但它真的是一堆sphagetti代码,一切都需要永远做,事情因为微小的变化而一直在破碎.

我一直在阅读Martin Fowlers"Refactoring"和Michael Feathers"使用遗留代码有效地工作" - 而且它们很好,但我觉得它们是针对一个'略微'更好的架构的应用程序编写的,它仍然是一个3-分层架构,并且存在"某种"逻辑相似性.

思考/输入任何人?

哦,还有"救命!"

vb.net asp.net webforms web-applications dynamic

7
推荐指数
2
解决办法
1858
查看次数