Tag: 体系结构

描述用于Java Web应用程序的体系结构?

让我们分享基于Java的Web应用程序体系结构! 对于要使用Java实现的Web应用程序,有许多不同的体系结构。 这个问题的答案可以作为各种networking应用程序devise的优点和缺点。 虽然我意识到答案是主观的,但我们尽量客观,激励我们列出的利弊。 使用您喜欢的细节级别来描述您的架构。 为了您的答案具有任何价值,您至less必须描述您所描述的架构中使用的主要技术和思想。 最后但并非最不重要的是,我们什么时候应该使用你的架构 我会开始… 架构概述 我们使用基于Sun开放标准的三层体系结构,如Java EE,Java持久性API,Servlet和Java Server Pages。 坚持 商业 介绍 层之间可能的通信stream量表示为: Persistence <-> Business <-> Presentation 例如,这意味着表示层从不调用或执行持久性操作,它始终通过业务层完成。 这种架构旨在满足高可用性Web应用程序的需求。 坚持 执行创build,读取,更新和删除( CRUD )持久性操作。 在我们的例子中,我们使用( Java持久性API )JPA,我们目前使用Hibernate作为持久性提供者并使用它的EntityManager 。 这个层被分成多个类,每个类处理某种types的实体(即与购物车相关的实体可能会被一个持久化类处理),并且被一个且只有一个pipe理器使用 。 此外,这个层还存储JPA实体 ,如Account , ShoppingCart等。 商业 所有绑定到Web应用程序function的逻辑都位于此图层中。 这种function可能会启动一个客户谁想要支付使用他/他的信用卡在线产品的资金转移。 这也可能是创build一个新的用户,删除一个用户或计算基于Web的游戏战斗的结果。 这个层被分成多个类,每个这些类都用@Stateless注解成为无状态会话Bean (SLSB)。 每个SLSB被称为经理 ,例如经理可以是一个被称为AccountManager注解类。 当AccountManager需要执行CRUD操作时,它将对持久层中的类AccountManagerPersistence的实例进行适当的调用。 AccountManager中两个方法的粗略草图可能是: … public void makeExpiredAccountsInactive() { AccountManagerPersistence amp […]

为什么IoC / DI在Python中不常见?

在Java中, IoC / DI是一种非常普遍的做法,广泛用于Web应用程序,几乎所有可用的框架和Java EE。 另一方面,也有很多大的Python Web应用程序,但除了Zope(我听说应该是非常糟糕的代码)之外,IoC在Python世界中似乎并不常见。 (如果你认为我错了,请列举一些例子)。 当然有几个stream行的Java IoC框架的克隆可用于Python,例如springpython 。 但是他们似乎都没有被实际使用。 至less,我从来没有在Django或sqlalchemy + <insert your favorite wsgi toolkit here>基于Web的应用程序,它使用类似的东西。 在我看来,IoC具有合理的优势,例如可以很容易地replacedjango-default-user-model,但Python中接口类和IoC的广泛使用看起来有点奇怪,而不是pythonic。 但也许有人有一个更好的解释,为什么IoC没有广泛使用Python。

当Node.js仍然依赖于内部的线程时,Node.js如何更快地运行?

我只是看了下面的video: 介绍Node.js ,仍然不明白你如何获得速度的好处。 主要的一点是Ryan Dahl(Node.js的创build者)说Node.js是基于事件循环而不是基于线程的。 线程是昂贵的,只能留给并发编程专家来利用。 后来,他显示了Node.js的架构栈,它有一个底层的C实现,在内部有自己的线程池。 所以显然,Node.js开发者永远不会开始自己的线程或直接使用线程池…他们使用asynchronouscallback。 我理解这一点。 我不明白的一点是,Node.js仍然在使用线程……它只是隐藏了实现,所以如果50个人请求50个文件(当前不在内存中),那么这个速度如何更快,而不是50个线程? 唯一的区别是,由于它在内部进行pipe理,Node.js开发人员不必编写线程细节,但在其下面仍然使用线程来处理IO(阻止)文件请求。 所以你不是真的只是一个问题(线程),并隐藏它,而这个问题仍然存在:主要是multithreading,上下文切换,死锁…等? 必须有一些细节,我仍然不明白在这里。

multithreadingC#应用程序与SQL Server数据库调用

我有一个SQL Server数据库,在表main有50万条logging。 还有另外三个表称为child3 , child3和child3 。 child3 , child3 , child3和main之间的多对多关系通过三个关系表( main_child1_relationship , main_child2_relationship和main_child3_relationship 。 我需要读取main的logging,更新main ,还可以在关系表中插入新行,并在子表中插入新logging。 子表中的logging具有唯一性约束,因此实际计算(CalculateDetails)的伪代码将如下所示: for each record in main { find its child1 like qualities for each one of its child1 qualities { find the record in child1 that matches that quality if found { add a record to main_child1_relationship to […]

“混蛋注射”和“穷人注射”之间的真正区别是什么?

从“.NET中的dependency injection”一书中,我知道应该在应用程序的Composition Root上创build对象图,这在使用IoC容器时对我很有意义。 在所有应用程序中,当我尝试使用DI时,总会有两个构造函数:一个是依赖关系的参数,另一个是没有参数的“默认”构造函数,然后调用另一个“新build”所有的依赖关系,但在上述书中,这被称为“混蛋注入反模式”,这就是我所知道的“穷人的注射”。 现在考虑这一切,我会说,“穷人的注入”只是不使用IoC容器,而是用手在所述组合根上编码所有的对象图。 所以我的问题是: 我是否正确理解这些概念,还是完全偏离轨道? 如果仍然需要在IoC容器中注册所有依赖关系,而不是使用完全相同的Composition Root对它们进行编码,那么使用IoC容器的真正好处是什么? 如果我误解了“穷人注射”究竟是什么,请问有人能澄清吗? 谢谢

我应该从Domain层抽象validation框架吗?

我正在使用FluentValidation来validation我的服务操作。 我的代码如下所示: using FluentValidation; IUserService { void Add(User user); } UserService : IUserService { public void Add(User user) { new UserValidator().ValidateAndThrow(user); userRepository.Save(user); } } UserValidator实现FluentValidation.AbstractValidator。 DDD说领域层必须是技术独立的。 我正在做的是使用validation框架,而不是自定义的例外。 将validation框架放入域图层是一个坏主意?

ASP.NET MVC3和entity framework代码第一架构

我以前的问题让我再次想到层,存储库,dependency injection和像这样的架构。 我的架构现在看起来像这样: 我首先使用EF代码,所以我只是创build了POCO类和上下文。 这创build了数据库和模型。 级别更高的是业务层类(提供者)。 我为每个域使用不同的提供程序…像MemberProvider,RoleProvider,TaskProvider等,我在这些提供程序中的每个提供了我的DbContext的新实例。 然后我在我的控制器中实例化这些提供程序,获取数据并将它们发送到Views。 我最初的架构包括仓库,我摆脱了,因为我被告知这只是增加了复杂性,所以为什么我不只是使用EF。 我想这样做..直接从控制器使用EF,但是我必须编写testing,这与真实的数据库有点复杂。 我不得不假冒 – 莫名其妙的数据。 所以我为每个提供者做了一个接口,并用列表中的硬编码数据做了伪造的提供者。 这样我就回到了一些东西,我不知道如何正确地进行。 这些事情开始太复杂了……许多方法和“pat”“……它创造了太多的噪音和无用的代码。 有entity framework创build和ASP.NET MVC3应用程序的任何简单和可testing的架构?

NodeJS真的是单线程吗?

Node.js通过使用事件循环而不是线程来将基于事件的模型放在其核心上,从而解决了“每个连接问题一个线程”的问题。 所有昂贵的I / O操作总是与启动操作完成时执行的callbackasynchronous执行。 如果任何操作发生,观察是由像epoll()这样的复用机制来处理的。 我现在的问题是: 为什么不使用阻塞SystemJall阻止NodeJS阻塞select / epoll / kqueue? 或者根本不是NodeJS单线程,所以第二个线程是 必须用select / epoll / kqueue观察所有的I / O操作?

什么时候适合使用C#部分类?

我是新来的部分类,并想知道是否有人可以给我一个概述,为什么我会使用它们,我会在这个过程中获得什么优势。

Symfony 2.x中的所有东西都应该是一个捆绑吗?

我意识到这样的问题,人们倾向于讨论Symfony 2的一般概念。 问题是,在一个特定的应用程序中,比如像一个类似twitter的应用程序,是否应该像真正的官方文档一样,真正在一个通用的bundle中? 我问这个问题的原因是,当我们开发应用程序时,通常我们不想将代码高度耦合到一些全栈胶水框架。 如果我开发一个基于Symfony 2的应用程序,并且在某种程度上,我决定Symfony 2并不是真正保持开发进展的最佳select,那对我来说会是一个问题吗? 所以一般的问题是:为什么一切都成为一件好事? 编辑#1 我问这个问题差不多一年了,我写了一篇文章来分享我对这个话题的认识。