我的相关问题框溢出了函数式编程问题.在审查了最相关的内容后,我仍然很想听到以下方面的意见:
您如何考虑使用函数式语言构建应用程序?
我不是在谈论语言特定的语法.我对概念组织范式(例如面向对象)感兴趣.
像许多人一样,我第一次接触封装和代码重用来自OO背景.由于我一直在研究不同的语言,函数式编程确实引起了我的注意.我开始意识到不变性,高阶函数等的好处.但是我仍然失去了对如何构建功能应用程序而不依赖于OO概念的感觉.实际上,我见过的许多功能性例子与意大利面条代码有更多共同之处,尽管我确信这是由于示例的简单性而不是功能方法中的任何固有缺陷.
这个问题是"什么时候应该使用函数式编程"的亲属,但我已经满足于自己的功能方法,尽管在某些领域有利有弊,但几乎可用于任何你想要的东西.我只是难以想象复杂应用程序的大图片组织.
我想这是一个关于框架如何愉快地完成你所需要的95%的故事,但随后在最后的5%时不赞成地皱眉; 告诉你,如果你想参加非标准的malarky这是你自己的事业,非常感谢你,如果你决定要回归做擅长的事情,它就会在这里.一般来说,最后的5%将不可避免地包含必备功能的某些版本.
我有一个强类型视图来更新数据对象.我使用惯用的MVC2助手,例如Html.TextBoxFor(model = > model.Name).我已经为嵌套对象使用了编辑器模板.(我的后端是Mongo文档的集合,所以我需要表示复杂的类型).
然后我需要一个下拉列表.事实证明,下拉有点挑剔; 没问题,我会创建一个viewmodel而不是item直接传入:
class itemViewModel
{
...
public Item item { get; set; }
public IEnumerable<SelectListItem> dropdown { get; set; }
}
public ActionResult()
{
return View("Update", new itemViewModel(item, dropdown))
}
Run Code Online (Sandbox Code Playgroud)
...工作正常,下拉列表填充.但!我的观点需要更新:
Html.TextBoxFor(model => model.Name) ->
Html.TextBoxFor(model => model.item.Name)
Run Code Online (Sandbox Code Playgroud)
很好,问题解决了.哎呀,现在我的模型绑定不起作用.我调试并查看Request.Form值:哦.item.Name而不是Name.说得通.我告诉我的Update视图,itemViewModel而不是绑定工作.
哦等等,不,不.因为我有嵌套使用编辑器的对象.它们是强类型的,并且它们不知道它们接收的模型实际上是视图模型的属性.所以他们仍然吐出来Address.City而不是item.Address.City绑定失败.
我可以想到几个解决方法:
item不知道它是属性的情况下获得模型ViewData字典破解下拉列表HtmlHelpers并手写整个表单HtmlHelper扩展,将lamba 和模型对象作为参数.所有这些感觉都像是矫枉过正或邋.. …