我被要求保留一些不像遗产一样的代码,并且它充满了编译器指令,使它几乎不可读,几乎可维护.例证:
#if CONDITION_1 protected override void BeforeAdd(LogEntity entity) #else protected override void BeforeAdd(AbstractBusinessEntity entity) #endif { #if CONDITON_1 entity.DateTimeInsert = DateTime.Now; #else ((LogEntity) entity).DateTimeInsert = DateTime.Now; #endif base.BeforeAdd(entity); }
使用指令甚至更漂亮:
#if CONDITION_1 using CompanyName.Configuration; #endif #if CONDITION_2||CONDITION_1 using CompanyName.Data; using CompanyName.Data.sqlBuilders; #else using CompanyName.Legacy.Database; using CompanyName.Legacy.Database.sqlBuilders; using CompanyName.Legacy.Database.sqlBuilders.parameterTypes; #endif
我以为我会给ConditionalAttribute
一个去,但在这种情况下这不会很有效
代码是针对.NET 3.5编译的.
更新:
Oded回答建议删除BeforeAdd方法周围的编译器指令,从而使其重载.不幸的是,这两个方法都不会起作用,因为两个方法都应该覆盖一个AbstractBusiness类,它提供两种不同的实现,具体取决于最终包含哪些程序集:
protected virtual void BeforeAdd(TEntity entity) {}
要么
protected virtual void BeforeAdd(AbstractBusinessEntity entity) {}
此代码从过去一段时间创建的一组库中获取其依赖关系,并且从那时起一直在“升级”.他们现在有4个不同版本的库,其中包含冲突的命名空间和不同的实现.所有这些都与使用(非常)旧版本的应用程序的“向后兼容性”有关.
结论
我最终选择了@Oded的答案,因为它作为一般方法最有意义(K.I.S.S.和所有这些).但是我不能在这种情况下使用它;你在这里看到的只是冰山一角.我不想要K.I.S.S.这个代码,如果它付给我.
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。