刚刚经历了一个小型实验会议,试图了解将我们的.NET类库或至少部分内容库带入Silverlight所需的工作量,以便我们可以在两个世界之间重用业务逻辑,我想知道其他人是否有这方面的经验。
我注意到的事情,从头顶开始:
所以我想知道,我甚至认为这是可行的吗?
我运行了初始代码,但我不得不注释掉很多基本功能,主要是处理列表,因为它们基于ITypedList和一些基类。显然我需要在Silverlight中更改为ObservableCollection,因此需要更改整个基本代码才能应对。
我创建的实际业务测试类与我为.NET制作的实际业务测试类相同,只有一些微小的更改,这些更改很容易在.NET中使用,就像我没有做过的那样在看Silverlight之前。换句话说,如果我可以使基类兼容,那么共享业务逻辑看起来是可行的。
就这样我很清楚,我所说的是我基本上会有两个项目文件,一个用于.NET,一个用于Silverlight,但实际的C#源代码是相同的,在2。
那么有没有人有这方面的经验?任何提示或指南?
值得吗?它肯定值得更多关注。
答案 0 :(得分:4)
这绝对可行。
这是在一个项目上完成的; Silverlight项目包含C#,并且有一些#IF
语句处理一些事情(比如log4net声明),有时候事情只是重新实现。但总的来说,这是一个巨大的胜利,你一定要尝试它(当然,我们已经成功)。
- 编辑:
但有一点,我们的OR / M(LLBLGen)没有内置支持通过Silverlight发送的“简单”对象;但有人写了一个处理它的插件,这有帮助。所以可能值得考虑一下你正在使用什么类型的DAL,以及它支持Silverlight的程度。
答案 1 :(得分:4)
我为促进这一点所做的是:
关于单独的基类的另一个注意事项 - 创建一个派生自Silverlight和BindingList中的ObservableCollection(或者您在.NET中使用的任何内容)的抽象类可能是值得的,以最小化对您的类型集合的影响。 / p>
<强>更新强> 今天我正在努力将一些.NET代码移植到Silverlight,这些代码大量使用System.Diagnostics API,如TraceSource,SourceSwitch等,它们在Silverlight中不存在。我在Silverlight项目中创建了非常小的实现,并将它们放在Einstein.Diagnostics命名空间中。在这样做时,我决定我需要一个约定来轻松识别模仿.NET Framework与我自己的代码的代码。所以我将占位符文件重命名为带@符号的前缀。我也在这些文件中加上了类名称的前缀。关于这一点的好处是,就C#编译器而言,@符号实际上并没有改变它们的类名。所以@SourceSwitch仍然可以编译为Einstein.Diagnostics.SourceSwitch,但在代码中我可以很容易地看到有些东西在上升。我还用[SilverlightPlaceholder]属性装饰了这些类。
答案 2 :(得分:2)
我用protobuf-net做这个,我用了几种方法:
Expression
API,这很有趣 然而如果您正在使用ITypedList
(您提及),我可以看到整个方法相当混乱;组件模型已经足够复杂,而且不必强行通过黑客攻击。这真的取决于你走多远这条路。也许4.0 / dynamic
会再次打开其中一些选项?
答案 3 :(得分:2)
您的问题的一个可能的解决方法是从Mono项目中复制丢失的代码。在当天,我使用Compact Framework完成了一个小项目,它缺少整个System.XLM命名空间。我只是将Mono中的所有内容复制到我的项目中,编译它并且只需很少的更改即可完成,iirc。