fun*_*ing 31 .net c# asp.net silverlight f#
我主要开发业务应用程序.没有科学运作.没有复杂的计算.只需将用户界面绑定到数据库.我使用线程的唯一原因是在后台做一些工作并仍然保持UI响应.
这可能不是最好的方法,但这就是我所遵循的
1.首先创建一个工作应用程序(没有线程)并将其提供给最终用户以便进行反馈.
2.一旦所有需求都被锁定,我尝试在有意义的地方使用线程来提高性能.
步骤1和2的代码绝对不同,并且线程代码在实际代码中占主导地位.
1.对于业务线应用程序,F#会让我的生活更轻松吗?
2.是否有任何特定的UI技术最适合F#?我主要研究ASP.NET和Silverlight.WPF现在然后.
3.有哪些业务应用/演示与F#的好例子?
我不是在询问是否有可能在F#中开发业务线应用程序.我在问,与C#相比,F#是否会让我的生活更容易开发业务线应用程序?我主要担心的是线程和UI同步.
Jul*_*iet 33
我和你在同一条船上,做了很多很多业务类型的应用程序,没有像游戏或编译器或搜索引擎那样"有趣".
你的里程会有所不同,但至少根据我自己的经验,许多开发团队都不愿意直接进入F#,因为团队中没有其他人知道或者甚至没有听说过.不管怎样,你必须解决这些问题,比如"它与C#有什么不同?" 如果你可以说服你的老板让你用它写一些演示应用程序,那就去吧!
所以说到这一点,我发现C#在业务规则方面并不是很擅长,但它处理的GUI就像一个冠军; F#的不变性使GUI开发变得尴尬,但业务规则和工作流程感觉很自然.因此,这两种语言各有所长,并互相恭维.
在我自己的LOB应用程序中,F#在几个方面围绕C#运行:
F#的异步工作流程和邮箱处理器数量级容易的工作比原生线程,甚至是任务并行库.由于使用邮箱处理器进行线程间通信,我甚至不记得上次我必须锁定或thread.join()任何事情进行同步.
使用工会FTW定义业务规则引擎和DSL!我曾经工作的每个非平凡的LOB应用程序都有自己的半生不熟的规则语言和解释器,它几乎总是基于递归地切换枚举来钻取规则并找到匹配.我现在的项目现在包含1300多个公共类,大约900个是表示规则的简单容器类.我认为将规则表示为F#union会大大减少代码膨胀并使其成为更好的引擎.
不可变代码只是效果更好 - 如果你得到一个状态无效的新对象,你不必搜索很远的东西来找到有问题的代码行,你需要知道的一切都在调用堆栈上.如果您有一个状态无效的可变对象,有时您需要花费大量时间来跟踪它.您可以在C#中编写不可变代码,但实际上很难不依赖于可变性,尤其是当您在循环中修改对象时.
我讨厌空.我不能给出一个确切的估计,但感觉就像我们在生产中获得的一半错误是空引用异常 - 一个对象未正确初始化,直到您在代码深度为30个堆栈帧时才知道它.我认为F#会帮助我们第一次编写更多无错误的代码.
C#通常适用于:
您正在编写GUI代码或使用固有的可变系统.
向许多不同的客户端公开DLL或Web服务.
你的老板不会让你使用你想要的工具;)
因此,如果你能克服"我们为什么要使用新的语言障碍",我认为F#确实会让你的生活更轻松.
kvb*_*kvb 10
这是一个非常难以回答的问题 - 我认为F#会让你生活中的某些方面变得更容易,而且有些困难.
从好的方面来说,处理线程应该相对轻松--F#异步工作流程是一个巨大的好处.此外,F#Interactive可以非常轻松地快速迭代和探索代码.对我而言,这是一个比C#更大的优势,因为我可以在不经过完整构建的情况下测试较小的代码更改.
另一方面,F#的工具不适用于C#,这意味着您将无法访问GUI构建器,重构工具等.很难说这会对生产力造成多大影响你不知道更多关于你的场景.一种解决方法是创建一个具有精简C#前端的多语言解决方案,但同样复杂性可能不值得获益.
@Juliet和@kvb有很好的答案,我只想重申F#对于简化线程有多大帮助.在我的博客文章" F#中的RSS仪表板,第六部分(将它与WPF GUI结合在一起) ",我说
...请注意这里使用'async'的漂亮 - 我使用Async.StartImmediate,这意味着所有代码都在UI线程上运行(Click处理程序启动的地方),但我仍然可以执行非阻塞睡眠堵塞用户界面.这是F#异步只是吹掉其他一切的一种方式.
...
如果我们不刷新它们,我们的"前"信息("3分钟前")将很快变得陈旧,所以我们开始一个每分钟重绘一次的循环.再次,F#async踢了屁股,因为我可以写这个就好像它是在UI线程上运行的同步循环,但非阻塞睡眠调用确保UI保持活动.真棒....
但该博客文章是使用F#手动编码整个UI的示例.这意味着将您使用C#或VB获得的所有优秀GUI工具交易掉.我认为混合方法几乎可以带来两者的所有好处(在解决方案中有两个项目的成本,而你之前只有一个),但我(还)没有直接的经验.在这里分享.
(C#GUI应用程序是否存在规范的 "问题示例",您需要在长时间运行期间添加线程以提高性能或保持应用程序的实时性?如果是,我应该检查它.)
| 归档时间: |
|
| 查看次数: |
3530 次 |
| 最近记录: |