我想听听其他人建议何时构建Web应用程序而不是构建胖客户端的建议.
在过去几年中,我参与了几个关于是否应该使用Web浏览器界面构建应用程序(或升级旧应用程序)的讨论.通常这些是组织内部使用的内部系统,而不是大众市场的收缩包装产品,它们实际上并不在公共互联网上.我不想仅仅将讨论限制在这些类型的应用程序中.
在一些明显的情况下,应用程序应该是一个或另一个(例如,没有基于Web的视频编辑软件).另一方面,Javascript库在浏览器中提供更丰富的体验,每天难以实现.
有没有Javascript库和高级服务器端技术,无需大量工作就可以在客户端进行右键单击上下文菜单,拖放等操作?在什么时候,为Web编写的额外复杂性会覆盖诸如易于部署和跨平台兼容性等优点,特别是如果您不是要创建下一个Stack Overflow,而只是构建内部应用程序?
内部应用程序是否有一个有限的和受限制的受众或多或少都会覆盖厚客户端可以提供的改进可用性的任何问题?
我习惯于在Web应用程序中使用IoC/DI - 主要是使用MVC3的Ninject.我的控制器是为我创建的,充满了所有依赖关系,子依赖关系等.
但是,胖客户端应用程序的情况有所不同.我必须创建自己的对象,或者我必须恢复到服务定位器样式方法,我要求内核(可能通过某个接口,允许可测试性)给我一个完整的依赖项对象.
但是,我已经看到Service Locator被描述为反模式的几个地方.
所以我的问题是 - 如果我想在我的胖客户端应用程序中受益于Ninject,是否有更好/更正确的方法来获得所有这些?
请注意我不只是在这里讨论MVVM并将视图模型放入视图中.这特别是需要从内核提供存储库类型对象,然后从该存储库中提取的实体注入了功能(当然数据来自数据库,但它们也需要一些对象作为参数,具体取决于状态世界,Ninject知道如何提供).我可以以某种方式做到这一点,而不会将存储库和实体都作为不可测试的混乱吗?
如果有什么不清楚,请告诉我.谢谢!
编辑7月14日
我确信提供的两个答案可能是正确的.然而,我身体的每一根纤维都在对抗这种变化; 其中一些可能是由于缺乏知识造成的,但也有一个具体原因导致我无法看到这种做事方式的优雅;
我没有在原始问题中解释得这么好,但问题是我正在编写一个库,将被几个(首先是4-5,可能更晚)的WPF客户端应用程序使用.这些应用程序都在相同的域模型等上运行,因此将它们保存在一个库中是保持DRY的唯一方法.但是,该系统的客户也有可能编写自己的客户端 - 我希望他们有一个简单,干净的库来与之交谈.我不想强迫他们在他们的作文根中使用DI(在他的书中使用像Mark Seeman这样的术语) - 因为与他们相比,只需要新建一个MyCrazySystemAdapter()并使用它就可以使事情复杂化.
现在,MyCrazySystemAdapter(因为我知道人们会在这里不同意我选择的名称)需要由子组件组成,并使用DI组合在一起.MyCrazySystemAdapter本身不需要注入.它是客户端与系统通信所需的唯一接口.因此,一个客户应该得到其中一个,DI就像魔术一样在幕后发生,并且该对象由许多不同的对象使用最佳实践和原则组成.
我确实意识到这将成为一种想要做事的有争议的方式.但是,我也知道将成为此API客户的人员.如果他们发现他们需要学习并连接DI系统,并在他们的应用程序入口点(Composition Root)中提前创建他们的整个对象结构,而不是新建一个对象,他们会给我中指和直接搞乱数据库并以你难以想象的方式搞砸了.
TL; DR:为客户端提供结构合理的API太麻烦了.我的API需要提供一个单独的对象 - 使用DI和适当的实践在幕后构建 - 他们可以使用.现实世界有时胜过为了坚持模式和实践而向后建造一切的愿望.
dependency-injection ninject testability thick-client service-locator
我在这里看到了关于这个主题的一些其他类似问题,但是他们没有太大帮助所以我提出这个问题.
将合理大小的简单Web应用程序转换为基于Java桌面的PC和Mac客户端的最快方法是什么?不幸的是,由于各种原因,我无法在这里分享关于应用程序的大量细节.应用程序中最复杂的UI虽然是一个包含多级线程讨论的页面(请参阅此处以获取我正在讨论的内容的说明性示例.)当前的Web应用程序基于python,所以我无法使用任何来自服务器端代码(不要认为这是一个问题)
我从未做过任何swing或awt或任何其他基于Java的胖客户端GUI工作.我的想法或多或少地由基于Web的应用程序定义.我能够使用Java或python进行端到端的Web应用程序开发(包括使用HTML,CSS和JS的后端和体面的UI).对于您的答案,请仅关注Java解决方案.
所以这是我的问题我应该使用的最佳框架或工具是什么?作为我研究的一部分,我在网上发现了以下一些工具.
我需要记住的其他一些问题是什么?我希望你发表评论的一些是:
我的截止日期最长为2个月 - 考虑到我需要学习所有这些技术,这对于一个相当简单的网络应用程序是否足够?我只想在这里尝试一下 - 我知道很可能无法给出准确的答案 - 只要假设我足够聪明并且可以足够快地拿起任何不熟悉的技术堆栈.
谢谢!
我想知道胖客户端和独立应用程序之间的确切区别.
根据维基百科,胖客户端仍然需要应用程序服务器.
我有一个.Net Windows窗体应用程序,它不连接到应用程序服务器但仍使用数据库服务器.此应用程序仅是数据库服务器的SQL提供程序,不以相关方式处理数据.
此应用程序被认为是独立应用程序还是胖客户端?
编辑:例如,Microsoft SQL Server Management Studio是独立应用程序还是胖客户端?