使用spring 4和maven,我习惯于创建分层应用程序,其中子项目编译成war,根项目编译成war。例如
Web Layer
|
Service Layer
|
Dao Layer
(Shared Common Project)
使用此体系结构,我还可以创建两个具有公共父pom并共享相同子项目的Web应用程序
Web Layer Admin Web Layer
\ /
|
Service Layer
|
Dao Layer
在Mark在.NET中的依赖注入中,他向UI层注入了一个存储库。我相信他这样做是为了让他能够在UI配置中存储所有的东西,然而这对我来说只是糟糕的设计。将服务引用传递到UI不是更好吗?怎样才能阻止未来的开发人员直接使用存储库?同时,他说他正在把它作为一种n层架构来构建。但是,他现在已经将数据层耦合到UI层(不管是否使用DI )。如果他想把所有三个层都放在不同的独立服务器上呢?虽然他的方法可能会奏效,但对我来说,这似乎是错误的。所以,我想看看整个社会有什么要说的。我的想法是对的,还是我错过了什么?
代码的简化版本:
public class UI
{
IRepository _repo;
哈罗,
为什么我需要两个类来获取我的数据?如果服务实际上除了调用DataProvider中的方法之外什么也不做,那么为什么DataProvider类还不够呢?
interface ICustomerDataProvider
inferface ICustomerService
class CustomerDataProvider : ICustomerDataProvider
{
// Do Sql queries here
// return sql data and write all DataReader data into customer objects....
在分层架构中让服务依赖于服务是一种糟糕的实践(或者可能是反模式)吗?我注意到,当应用程序是以一种服务可以调用另一个承载业务逻辑的服务的方式设计时,扩展企业应用程序就变得非常复杂和具有挑战性。
想象一下下面的几层:
控制器:
控制器A
控制器B
服务:
服务X
服务Y
服务Z
仓库
储存库K
储存库M
例如,Controller A > Service X > Repository K是一个有效的依赖项,但是Controller A > Service X > Service Z> Repository K似乎不是一个很好的实践,因为经过一段时间之后,它可能变得相当
我正在用3层构建一个简单的web应用程序- DAO,Service,MVC。在我的控制器中,我想删除菜单组,它包含我要得到的ConstraintViolationException菜单。
我该在哪里处理这个异常呢?在DAO,服务,还是在控制器?目前,我正在处理控制器中的异常。
下面是我的密码。
删除菜单项组的DAO方法:
@Override
public void delete(E e){
if (e == null){
throw new DaoException("Entity can't be null.");
}
get
如标题所示,在设计服务层时,最佳实践是什么?我确实理解服务层应该始终返回DTO,以便在服务层中保留域(实体)对象。但是,来自控制器的服务层的输入应该是什么?
以下是我个人的三项建议:
方法1:在此方法中,在服务层中保留域对象(项)。
class Controller
{
@Autowired
private ItemService service;
public ItemDTO createItem(IntemDTO dto)
{
// service layer returns a DTO object and accepts a DTO o
例如,我们有一个模型Product,网页可以插入一个产品并在一个请求中返回所有产品。
下面写控制器的最好方式是什么,道和服务?为什么?
答:
@Repository
public class ProductDaoImpl implements ...{
@Override
public List<Product> findAll(){
// return all product
}
@Override
public void insert(Product product){
// just insert a product
我有一个长期运行的服务,它从一个源获取数据,操作它,将它存储在数据库中,等等。
我想向其他应用程序公开关于该服务的一些方法。目前,我们通过.NET远程处理来实现这一点,但是我想转移到WCF。
不幸的是,我连接到的端点从来都不是我通过长期运行的服务公开的端点。下面是一个简单的例子:
[ServiceContract]
public interface ITestWcfService
{
[OperationContract]
CounterResult GetCurrentValue();
}
public class TestW
首先,我意识到在项目布局方面没有一个合适的标准,但是当我转向mvc时,我想尝试从坚实的基础开始。
目前,我在asp.net mvc项目结构以及n层和依赖项注入(ninject)方面确实遇到了困难。我一直在阅读Pro Asp.net Mvc 3框架,它将体育商店分为两个项目,这是一个很好的开始,但我希望更大的分离。
到目前为止,我认为我的项目应该类似于下面的大纲
Web (Asp.Net Mvc)
服务层
- Service Interfaces (abstract)
- Service (concrete implementation of Service Interfaces
你能给我一些点击或者解释如何在.net中创建企业级应用程序,以及项目类型如何使用或者这个项目的结构应该如何?我在EE的新手,我读到了它,但对我来说,是最好的解释现实世界的例子。我对.net中EE解决方案结构的看法是:
数据层(项目类型=>类库)
- database access classes
- some mappers (I am not sure if I could use data mapper pattern or else? Is good idea?)
业务层(项目类型=>类库)
- entities which wil lbe map
我正在做一个spring boot服务项目,其中我们有多个Spring service bean,它们相互自动连接。
例如:
@Service
public class Service1
@Autowire
Service2, Service3
.
.
.
@Service
public class Service5
@Autowire
Service 4, Service 1
@Repository
public interface Service1Repository extends JpaRepository<Entity1, UUID>
.
.
.
@Repositor
我有一个带有Spring和Hibernate的MVC应用程序
我让每个控制器调用调用dao的服务层。
controller > service > dao
服务应该总是返回一个实体吗?
我试图将逻辑从控制器移动到服务。目前,这是控制器中的逻辑
autenticate
retrieve user information (service call)
retrieve his appointments (other service call)
create a status response in xml
return appointemnts
正如您所看到的,如果我移动服务中
我想问一下架构模式。我编写了两个代码片段来演示我提出的问题。
第一种方式是:
//a method on controller layer (in spring framework)
@RequestMapping(...)
public ShopDTO findShop(final Long shopId){
Shop shop = shopService.getShopById(shopId);
ShopDTO shopDTO = shopMapper.toShopDTO(shop);
return shopDTO;
}
//A method on service
我们目前有一个Silverlight 2.0应用程序与一组WCF web服务进行通信。这些服务与其他WCF服务进行业务逻辑通信。
Client DMZ Intranet
Silverlight -> WCF Web Service Gateway -> WCF Biz service -> DB
WCF web服务网关驻留在DMZ中。
我们看到Ria服务可以取代我们的WCF web Service网关,但这意味着它将安装在我们的DMZ中,并且可以访问我们的数据库。这安全吗?
我们似乎也失去了业务逻辑WCF服务.
我试图对一个以分页格式返回结果的API进行服务调用,并希望对迭代器的设计模式提出建议。
到现在为止我拥有的是这样的东西
public class CustomIterator implements Iterator<Type> {
private List<Result> results;
private Service service;
private int index;
private int paginatedResultSize;
private int totalResultsSize;
public CustomIterator(Serv