标签: presentation-layer

为什么要将我的域实体与表示层隔离?

域驱动设计的一部分似乎没有太多细节,是您应该如何以及为什么要将域模型与界面隔离开来.我试图说服我的同事,这是一个很好的做法,但我似乎没有取得多大进展......

他们在演示文稿和界面层中随意使用域实体.当我向他们争辩说他们应该使用显示模型或DTO来将Domain层与接口层隔离时,他们反驳说他们在做类似的事情时看不到业务价值,因为现在你有一个UI对象要维护以及原始域对象.

所以我正在寻找一些可以用来支持它的具体原因.特别:

  1. 我们为什么不在表示层中使用域对象?
    (如果答案是明显的,'脱钩',那么请解释为什么这在这方面很重要)
  2. 我们应该使用其他对象或构造来将我们的域对象与接口隔离吗?

architecture design-patterns domain-driven-design data-transfer-objects presentation-layer

83
推荐指数
5
解决办法
1万
查看次数

各种Java Web表示层技术的优缺点

我目前正在开发一个大量使用JSF和IceFaces的网络应用程序.我们已经讨论过转移到另一个表示层,我想我会把讨论带到SO中,看看专家们的想法.

我很好奇是否有人可以权衡各种Java表示层技术的优缺点.如果你只和一个人一起工作,说出你为什么喜欢或讨厌它.如果您与多个人合作过,请给出他们如何相互叠加的印象.

我们正在考虑的技术是:

  • ICEfaces的
  • JSF(没有IceFaces)
  • GWT(谷歌网络工具包)
  • 便门
  • 挂毯

如果我遗漏了我的清单中的任何内容,请告诉我.

谢谢!

java presentation-layer java-ee

16
推荐指数
2
解决办法
1万
查看次数

将表示逻辑放在控制器中是Ruby的一个好习惯吗?

一些建议[1]建议你使用

<%= current_user.welcome_message %>
Run Code Online (Sandbox Code Playgroud)

代替

<% if current_user.admin? %>
  <%= current_user.admin_welcome_message %>
<% else %>
  <%= current_user.user_welcome_message %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

但问题是你必须在代码中的某个地方拥有决策逻辑.

我的理解是把决定放在template最好,而不是controller让你的控制器更干净.这是对的吗?

有没有更好的方法来处理这个?

http://robots.thoughtbot.com/post/27572137956/tell-dont-ask

ruby templates ruby-on-rails presentation-layer

11
推荐指数
3
解决办法
573
查看次数

如何避免跨多个不同的表示层复制业务逻辑

我目前正在为多渠道商务系统设计架构,该系统将具有针对设备和频道(用户类型和位置)定制的多个不同的前端演示.我面临的挑战是如何最好地确保我们以减少前端表示层重复的方式开发核心商务平台.

以下是我们需要支持的不同前端演示层的示例:

  • 面向消费者的传统桌面网站
  • 针对消费者的移动优化网站
  • 适用于消费者的原生移动应用程序(iOS/Android)
  • 客户支持中心的客户支持中心网站
  • 基于Instore信息亭的网站,供消费者在实体店购物
  • 其他(微型网站和其他利用各种技术,如Angular,PHP,.NET等)

现在,我了解了分层体系结构(表示,业务,数据层)和常见设计模式的最佳实践,以解决单个应用程序(如MVC,验证器,拦截器)中的前端挑战.但是,这些原则都没有解释在面对支持多个前端时如何以及在何处最佳地封装您的表示特定业务逻辑.

所以,我的问题是在开发这样一个系统时要遵循一些好的做法和原则,以确保每个前端应用程序不会重复前端业务逻辑?

我过去使用不同的方法开发了许多具有这种要求的应用程序......其中一些工作得相当好,一些工作效果不是很好.但每次我觉得我正在为一个普通问题发明一个解决方案,并且必须有一些最好的实践和原则来利用.

我要问的具体挑战的一个简单例子

我们所有的前端应用程序都必须支持注册新客户帐户的能力.登记表格将包含电子邮件,密码和客户地址信息(街道,城市,邮编等).提交表单时,在系统中创建帐户并向用户发送验证电子邮件之前,需要进行某些简单且非平凡的验证.例如:

  • 电子邮件地址模式验证规则
  • 确保系统中不存在电子邮件地址
  • 密码复杂性规则
  • 地址验证(通过第三方地址验证/标准化系统)

在大多数情况下,需要在所有前端系统中强制执行这些验证规则,尽管每个前端的注册流可能略有不同,并且可能只包含字段的子集.那么,为前端提供API的一些好的做法是什么,这样每个前端都不会复制正确验证和处理注册所需的各个步骤?例如,如果我们决定更改密码复杂性规则或地址验证规则等 - 我们是否可以最好地设计系统,以便我们不必走出去并使用这个新的验证逻辑更改所有各种前端应用程序.

为了清楚起见,我并不关心在哪里放置所有前端共享的核心业务逻辑(即帐户创建服务,地址验证服务,帐户查找服务等).这些模式通常在博客,书籍和论坛中讨论.我的问题与业务逻辑特别相关,业务逻辑通常与表示层紧密耦合.一些问题总是浮现在我的脑海中.

  • 我们是否应该提供支持所有前端操作的表示服务层,包括表单验证和通过Web服务处理?或者每个前端是否应该拥有它的表示逻辑,因为"没有两个前端相似"?
  • 如果我们确实创建了一个表示服务层,我们如何提供解决每个前端细微差别的服务?我们是否为每个前端提供不同的服务/端点,或者只是提供每个前端在调用我们的服务时传递的不同"上下文"?
  • 此表示服务层是否控制错误消息传递并向每个前端返回适当的上下文感知消息,或者我们是否应该传回错误代码并让前端拥有此消息?
  • 等等

design-patterns business-logic web-applications presentation-layer n-tier-architecture

11
推荐指数
1
解决办法
1522
查看次数

重构旧版WebForms应用程序以更好地分离关注点

当MVC不是一个选项时,MVP仍然是下一个最佳选择吗?

我想我会在这里问这个,因为我确信还有像我这样的其他人没有奢侈品参与绿地项目,并希望重构webforms UI以更好地分离演示文稿和业务对象. .

我正在开发一个遗留应用程序,其任务是添加相对较少的附加要求,增强功能和错误修复程序.

我在这里解决的应用程序部分可能被描述为一组CRUD操作的UI,这些操作是持久存储到关系数据库的业务对象.

现有UI使用MultiView控件在关联业务对象(一对一关联或一对多/父子对象)的编辑之间进行导航.是的,这是对的 - 所有这一切都在一页上.不幸的是,UserControls的使用非常少,因此标记和代码隐藏的时间长达数百行.

在每个View上,FormView通过各种ObjectDataSource管理业务对象上的CRUD.在每个FormView的ItemTemplate中,各种服务器控制数据绑定到ObjectDataSource上的字段或方法.

我想引入更多的关注点分离,并从页面代码中获取一些代码.

到目前为止,我的研究建议我可以考虑:

  1. 使用Model View Presenter的风格 ; 更具体地说 - 使用Web客户端软件工厂中的ObjectContainerDataSource,可以更轻松地在当前UI和一组新的Presenter类之间进行桥接.

  2. 使用MVC框架(不是选项)从头开始构建.

  3. 别管; 如果我需要在不同的UI场景中重用我的演示文稿,MVP模式是否合理?

如果我满意(3)我仍然想知道如何开始重构以更好地分离演示.

你会怎么做?感恩的任何其他想法......


这里有一些感兴趣的人的背景:

该领域是在药物研究领域,但这是相当无关紧要的,您可以将其视为非常典型的业务线 - 一系列设置的用户配置,这些设置构成了应用程序另一部分的操作条件.

业务对象层已经以非常一致的方式构建.虽然我可能不喜欢它,但我无法证明改变它是正确的.每个对象都是它自己的存储库/数据访问对象,因为存在"按ID获取"和"按标准获取列表"的静态方法.在可能的情况下,常见操作在抽象基类中实现.每个业务对象都将数据访问工作委托给数据访问层,该数据访问层利用ADO.NET 2.0 Provider Factory机制来保持与具体Provider相对抽象.在这方面,它与使用Microsoft企业库中的数据访问应用程序块的任何应用程序共享很多共同点.

在NUnit中编写了相当详尽的集成测试,它们从头开始设置测试数据库,因此它们需要很长时间才能运行,但至少他们会验证这些内容是否正常工作(无论如何在过去的某些时候;-).几乎没有真正的单元测试(还).

asp.net mvp webforms presentation-layer separation-of-concerns

6
推荐指数
1
解决办法
1351
查看次数

是否有一种巧妙的方法来获取表示层中背景图像的属性?

我有一个CC-BY图像,我用它作为背景,由CSS引入.这个图像纯粹是为了它的外观,绝对不是内容.我需要在某个地方放置此图像的归属,显然最好将此归因链接到提供图像的善良人物.但是,我真的不想把链接文本放到我的HTML中,因为它打破了实际内容和表示的分离(我会说,归因链接实际上是演示文稿的一部分,因为如果您查看了没有背景图像的页面,你真的不想看到它).

有什么方法可以让我在这里分享演示文稿和内容吗?

我目前的代码看起来像


<div class='backgrounded'>
  <div class='content'><h1>Some stuff here</h1></div>
  <div class='attribution'>
    Image from <a href='http://example.com/image'>Lovely CC-BY person</a>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

而CSS:


div.backgrounded {
    background: url(/images/an_image.jpg);
}
div.attribution {
    color: #ffffff; 
    float: right;
}
Run Code Online (Sandbox Code Playgroud)

这具有内容中的归属,我宁愿不拥有它.

我考虑过的其他事情包括:

  • 将归因放在图像本身中.这解决了代码分离问题,但我的图像是一个很好的宽图像,位于左侧,因此有足够的背景用于宽浏览器窗口.图像的右下角几乎总是不在视野范围内.我不知道如何将此归因作为链接.

  • 制作包含归因文字的图片并将其放在当前归属的位置,再次在后台,但最重要的是我想我可以使用JavaScript将其作为链接.这似乎是很多摆弄.

有没有办法在我的图像只在CSS中引用?或者失败了,保持事物分离的最佳方法是什么,以便例如可以在不编辑HTML的情况下替换图像?

css presentation-layer separation-of-concerns

6
推荐指数
1
解决办法
1528
查看次数

何时在Rails视图中使用@以及何时使用符号?

  <% form_tag(:action=>'update', :id=>@album.id) do %>

  Title: <%= text_field(:album, :title)  %><br>
  Artist: <%= text_field(:album, :artist)  %><br>
  Genre: <%= text_field(:album, :genre)  %><br>
  Release Date: <%= datetime_select(:album, :release_date, :start_year=>1960) %><br>

  <%= submit_tag("Update") %>

  <% end %>
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我不得不在form_tag中说@ album.id但在text_field中我不得不说:专辑.我在我的观点中一直混淆这些,并且从不真正知道是否使用@符号或符号.是否有一个简单的规则可以明确说明什么时候使用?

symbols ruby-on-rails instance-variables presentation-layer

5
推荐指数
2
解决办法
6820
查看次数

将业务与Presentation Logic分开的最佳方式?

我想创建一个既可以在本地也可以在线工作的游戏.

我的第一个想法是创建一个接口,该接口将具有GUI为业务逻辑所需的所有方法,然后具有网络实现和本地实现.

这适用于请求 - 响应消息.但是,服务器发送的消息呢,我必须更新一些GUI组件(即JLabel)?

我的第一个解决方案是实现监听器,其中实现中的每个更改都将触发事件.GUI将适当地注册和更改它的组件.但是,在业务逻辑中调用触发事件看起来有点不对劲.

我是在正确的轨道吗?因为我想我不是.有什么建议?

谢谢.

注意:客户端是一个简单的Java Swing GUI.

java business-logic-layer presentation-layer

4
推荐指数
1
解决办法
2940
查看次数

ASP.Net MVC和N-Tier

问候,

我提前道歉,我没有对此进行过彻底的研究,以便自己回答这个问题,但我想这需要一些时间,而且在我投入更多时间学习它之前,我宁愿知道.我最初的研究中找不到任何东西..

如果您已经使用多层架构(数据层,逻辑层,表示层),为什么要使用ASP.Net MVC?除了控制器具有比逻辑层更多的功率之外.

我是否正确地认为我可以在MVC的Model部分中使用nHibernate和我的所有数据访问类,实体和映射?

使用控制器时,最好将大量逻辑分成单独的类,以便从多个控制器中调用它吗?或者我可以从控制器本身调用它们,考虑到我不希望所有这些都是动作,只是常规方法.

谢谢

nhibernate asp.net-mvc presentation-layer n-tier-architecture data-structures

4
推荐指数
1
解决办法
2968
查看次数

在哪个层中控制器适合分层架构/ DDD

所以,我在这里看到了一些关于它的问题,但没有一个是关于它的具体问题,也没有回答我的疑问.

在分层架构/ DDD应用程序中,控制器(常见MVC应用程序中的"C")在哪个层中适合?我在不同的地方读过它可能在UI层或应用程序层中,但我仍然无法绕过正确的层.

我正在阅读埃里克埃文斯的DDD,直到我达到这本书的那一点我还想不通.我注意到他说如果UI层不复杂,你可以将它与应用层合并.这会对控制器产生相同的影响吗?

domain-driven-design controller presentation-layer n-tier-architecture application-layer

4
推荐指数
1
解决办法
731
查看次数