Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从asp.mvc应用程序迁移到node.js应用程序,重点是设计_Javascript_Node.js_Unit Testing_Unit Of Work_Sequelize.js - Fatal编程技术网

Javascript 从asp.mvc应用程序迁移到node.js应用程序,重点是设计

Javascript 从asp.mvc应用程序迁移到node.js应用程序,重点是设计,javascript,node.js,unit-testing,unit-of-work,sequelize.js,Javascript,Node.js,Unit Testing,Unit Of Work,Sequelize.js,我目前正在寻找替代平台,以便将现有应用程序迁移到,它最初是一个使用asp.mvc的原型,但大多数代码都是带有简单asp.mvc web服务的javascript,因此,在我们考虑将其向前推进时,似乎明智的做法是,我们放弃当前的microsoft堆栈,转而使用nodejs,让我们更自由地选择应用程序的托管位置和方式,此外,我们还可以在web服务和前端中重用一些模型和代码,尽管这可能会导致少量的重用 这可能是一个包含许多部分的相当大的问题,但无论如何我都会把它说出来,因为我相信这对很多其他人来说都是

我目前正在寻找替代平台,以便将现有应用程序迁移到,它最初是一个使用asp.mvc的原型,但大多数代码都是带有简单asp.mvc web服务的javascript,因此,在我们考虑将其向前推进时,似乎明智的做法是,我们放弃当前的microsoft堆栈,转而使用nodejs,让我们更自由地选择应用程序的托管位置和方式,此外,我们还可以在web服务和前端中重用一些模型和代码,尽管这可能会导致少量的重用

这可能是一个包含许多部分的相当大的问题,但无论如何我都会把它说出来,因为我相信这对很多其他人来说都是有帮助的,他们可以研究如何从.net/java迁移到node.js。由于大多数静态类型语言都使用了大量的模式和实践,例如控制反转、工作单元、面向方面编程等,因此转向另一个在这方面似乎不需要太多结构的平台似乎有点奇怪。。。因此,我对从我的超级结构化和测试世界迁移到这个看似非结构化和动态的新世界有些担心

下面是我在MVC中要做的主要事情,我目前想在node.js中做,但我不太确定实现相同级别的分离或功能的最佳方法


路由到操作 ASP MVC中的这种机制似乎可以被node.js中的Express所替代,这将使我能够将路由映射到方法。然而,有几个问题值得关注:

  • 在ASP MVC中,我的控制器可以被注入依赖项并具有变量,因此操作很容易测试,因为它们所依赖的一切都可以在需要时被模拟,并通过构造函数传递。然而,由于express中的方法似乎没有包含范围,因此我似乎必须要么使用全局变量,要么在内部使用新的变量。在这些路由方法中是否有一种很好的方法来访问我的业务逻辑容器

  • 有没有办法自动绑定正在发送的模型?或者至少以某种有用的方式获取json/xml等?看来,如果你发送正确的mime类型的内容,它可以提取,但我没有看到任何明确的例子,这在网上。我很高兴在Express上使用其他框架来提供此功能,因为理想情况下,我只想向
    /user/1
    发出POST请求,并将用户对象拉出,并在数据库中用id 1更新用户(我们将很快讨论)

  • 验证发送数据的最佳方法是什么?目前,在我们的前端javascript应用程序中,我们使用KnockoutJS,所有模型都使用knockout Observable,并使用knockout.Validation进行验证。我很乐意在节点上使用淘汰验证,因为模型是前端和后端之间的契约,但是如果有更好的解决方案,我很乐意研究它

数据库交互 目前在.net领域,我们使用NHibernate与关系数据库通信,使用MongoDB驱动程序与MongoDB数据库通信。我们使用通用存储库模式,并将查询隔离到它们自己的类中。我们还大量使用工作单元模式,因此我们可以将单词的逻辑块包装到事务中,然后,如果事务进展顺利,则将其全部提交,如果事务进展不顺利,则回滚。这使我们能够在几乎任何级别模拟对象,这取决于我们想要测试的内容,还允许我们轻松地更改实现。因此,我关注的是:

  • Sequalize似乎非常适合替换NHibernate,但是它似乎没有任何类型的事务处理,这使得创建工作单元模式非常困难。如果不能以同样的方式完成,这并不是世界末日,但我希望能够以某种方式将一大块工作分组,因此像CreateNewUserUnitOfWork这样的操作将采用表示用户详细信息的模型,对其进行验证,在一个表中创建一个条目,然后在其他表中创建一些关系数据,等等,从数据库中获取用户id,然后将其发回(假设一切顺利)。从QueryChainer来看,它似乎提供了大部分功能,但如果它在5个操作中的第3个操作失败,那么回滚似乎并不简单,那么有什么方法可以获得这种级别的控制吗
插件/分散的配置数据 这更像是我们应用程序的一个利基关注点,但是我们有中央应用程序,然后是其他包含插件的DLL。它们被放入bin文件夹中,然后连接到路由、数据库和验证配置。想象一下,谷歌主页和谷歌地图、文档等都是插件,它们告诉主应用程序将附加调用路由到插件中的方法,然后插件有自己的模型和数据库配置等。我关注的是:

  • 似乎有一种更新路由的方法,只需扫描目录中的新插件并包含它们()就可以了,但是有没有一些最佳实践来做这类事情,因为我不希望每个请求都必须不断地进行目录扫描。可以安全地假设,我很高兴在启动节点应用程序时将插件放在正确的位置,因此目前不需要在运行时添加插件
测试 目前在应用程序中有单元、集成和验收测试。单元测试发生在前端和后端,因此目前它将在我们的构建脚本中使用JsTestDriver进行javascript测试,以确认所有业务逻辑在隔离等情况下的预期工作。然后我们有集成测试,目前所有这些测试都是在C#中完成的,它将测试我们的控制器和操作