标签: separation-of-concerns

使用AJAX/JSON提供静态HTML和生成内容有什么好处?

http://blog.urbantastic.com/post/81336210/tech-tuesday-the-fiddly-bits

来自Urbantastic的Heath写了他的HTML生成系统:

Urbantastic中的所有HTML都是完全静态的.所有动态数据都以JSON格式通过AJAX发送,然后使用Javascript与HTML结合.换句话说,Urbantastic的服务器软件专门生产和使用JSON.HTML,CSS,Javascript和图像都通过不同的服务(vanilla Nginx服务器)发送.

我认为这是一个有趣的模型,因为它将表示与数据分开.我不是建筑专家,但似乎效率和稳定性会有所提高.

但是,以下关注我:


  • [主观] Clojure非常强大; Javascript不是.在为另一个目标创建的语言上编写所有内容生成将产生一些痛苦(想象一下在CSS中编写Javascript类型的代码).除非他有一个用于生成Javascript的宏系统,否则Heath可能需要在JavaScript和Clojure之间不断切换.他还会有很多JS代码; 可能比Clojure要多得多.在功能,快速开发,简洁以及我们在切换到基于LISP的语言时所考虑的所有事情方面,这可能不太好.

  • [性能]我不确定这一点,但渲染用户机器上的所有内容可能会滞后.

  • [可访问性]如果您已禁用JS,则根本无法使用站点.

  • [accessibility#2]我怀疑用JavaScript填充大量动态数据会产生跨浏览器问题.

谁有人评论?我有兴趣阅读你对这种架构的看法.

参考文献:

  1. 链接到关于HN的讨论.
  2. 链接到关于/ r /编程的讨论.

javascript json separation-of-concerns web-architecture static-html

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

谁负责编码字符串?

谁负责编码字符串,模型或视图?

我有一个来自数据库的字符串,它来自用户 - 我想在数据库中保留尽可能多的信息,所以我逐字保存输入.

当我来显示字符串时,我应该在填充视图模型时对其进行编码,还是视图决定是否要显示它是否编码?

谢谢,
K

asp.net-mvc separation-of-concerns

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

分离此代码的问题的最佳方法是什么?

在上一个问题中,Herbie博士对已接受答案的评论之一是我的方法执行了两项职责......即更改数据和保存数据.

我想弄清楚的是在我的情况下分离这些问题的最佳方法.

继续我的示例有一个通过NHibernate检索的Policy对象....

我目前将策略设置为非活动状态的方式如下:

Policy policy = new Policy();
policy.Status = Active;

policyManager.Inactivate(policy);

//method in PolicyManager which has data access and update responsibility
public void Inactivate(Policy policy)
{
    policy.Status = Inactive;
    Update(policy);
}
Run Code Online (Sandbox Code Playgroud)

如果我将数据访问和数据更新的责任分开,那么最好的方法是什么呢?

最好让PolicyManager(充当dao的网关)管理Policy对象的状态:

Policy policy = new Policy();
policy.Status = Active;

policyManager.Inactivate(policy);
policyManager.Update(policy);

//method in PolicyManager
public void Inactivate(Policy policy)
{
    policy.Status = Inactive;
}
Run Code Online (Sandbox Code Playgroud)

或者让Policy对象维护它自己的状态,然后使用manager类将信息保存到数据库:

Policy policy = new Policy();
policy.Status = Active;

policy.Inactivate();

policyManager.Update(policy);

//method in Policy
public void Inactivate()
{
    this.Status …
Run Code Online (Sandbox Code Playgroud)

c# separation-of-concerns

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

如何向某人解释数据结构不应该自我绘制,解释关注点的分离?

我有另一个程序员,我试图解释为什么UI组件也不应该是数据结构.

例如,假设您获得的数据结构包含"数据库"中的记录集,并且您希望在应用程序的UI组件中显示该记录集.

根据这个程序员(他将保持无名,他年轻,我正在教他......),我们应该将数据结构子类化为一个类,它将在我们的应用程序中绘制UI组件!!!!!!

因此,根据这个逻辑,记录集应该管理UI的绘制.

******总班台*****

我知道要求一个记录集来绘制它本身是错误的,因为如果你想在UI上的多种类型的组件上呈现相同的数据结构,那么你的手上就会有一个真正的混乱; 你需要为你从记录集的基类渲染的每个UI组件扩展另一个类;

我很清楚MVC模式的"清洁度"(并且我真正的意思是你不要把你的数据(模型)与你的UI(视图)或发生在你身上的行为混淆数据(控制器或多或少......好吧,不是真的API应该真正处理它......控制器应该尽可能少地调用它,告诉它要渲染哪个视图))但它确实更清洁而不是使用数据结构来呈现UI组件!

除了上面的例子之外,还有其他建议吗?我明白,当你第一次学习OOP时,你会经历"一个阶段",在那里你只需要扩展一切.

接下来是一个阶段,当你认为设计模式是每个问题的解决方案时......这也不完全正确...... 谢谢杰夫.

有没有办法可以轻轻推动这个孩子朝着正确的方向前进?你有更多的例子可以帮助解释我对他的观点吗?

oop model-view-controller extends extend separation-of-concerns

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

CakePHP最佳实践:管理员有或没有路由

我正在对我在CakePHP 1.2下构建的CakePHP应用程序进行大修.我已升级到1.3,正在考虑从我的应用程序的管理路由范例转移.我发现由于前端和管理员的重复功能,我的一些控制器变得非常大.我的直觉是,创建一组管理控制器并将管理路由放在一起更加清晰,但是我希望得到关于其他人正在做什么的信息以及我将错过的功能(如果有的话)丢弃路由.

在这方面,什么被认为是健壮的CakePHP应用程序(或其他MVC框架)的最佳实践?

php authorization cakephp url-routing separation-of-concerns

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

我的CRUD LINQ代码在哪里?ASP.NET MVC

我目前正在项目上使用ASP.NET MVC框架(几乎是我第一次)

我使用Linq2SQL作为我的数据模型..

我应该在哪里有这样的代码:

var entries = from e in db.sometable select e;
Run Code Online (Sandbox Code Playgroud)

我目前在控制器中有这样的代码并传递我进入视图的数据..

这个可以吗?

如果不是我如何让我的linq2sql数据模型包含这种代码?

谢谢

丹尼尔

model-view-controller asp.net-mvc separation-of-concerns

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

Rails 3.0/3.1,JQuery和Ajax最佳实践

这篇文章中有几个问题都与标题有关.该帖子的总体主题可以概括为"我缺少什么/你如何更好地做到这一点?"

通过谷歌搜索/截屏/ API的常用方法,我刚刚学习了如何使用Rails 3.0-JQuery-Ajax组合的初学知识.

我留下了一些(可能是相当大的?)问题.在Railscast 242中,Ryan最终通过以下方式执行页面的最终更新:

$("#products").html("<%= escape_javascript(render("products")) %>");
Run Code Online (Sandbox Code Playgroud)

起初,这看起来很奇怪,而且看起来有点奇怪:index.js.erb模板知道index.html页面有一个'#products'div,而index.js.erb模板本身就是这样的发出更新命令?在我看来,这似乎是对Separation of Concerns的轻微违反 - 不应该在index.html页面上的JS实际上用从帖子收到的数据更新页面,而不是来自服务器的脚本是什么实际更新页面?而且,这似乎有点脆弱.无论出于什么愚蠢的原因,如果我将index.html上的div重命名为'#products_collection',并忘记更改index.js.erb,那么我的index.html页面仍然有效,但我的Ajax更新不会.我想知道你是否认为以上几点是有效的/如果它们是怎么做的话.

如果需要,我可以解释那些事情:如果你把索引行为看作一个整体,那么index.js对index.html的了解并不重要.它们可能是紧密耦合的,但它们应该/可以.而你任何类型的测试都会发现div重命名.精细.但...

现在我想到了进一步深入Ajax兔子洞:假设您通过Ajax get将新表单加载到索引页面,然后通过Ajax帖子提交它.遵循相同的模式,您的create.js.erb文件可能如下所示:

create.js.erb?

$("#products").prepend("<%=escape_javascript( render 'product_as_table_row', :product => @product))%>");
Run Code Online (Sandbox Code Playgroud)

现在我的创建操作也知道我的索引页面是什么样的.嗯......现在假设我们也想做一个相对标准的行为,即通过flash向用户提供一条消息:

create.js.erb?

<% flash.each do |key, value| %>
  $("div#flash").html("<div class='<%=key%>'><%=value%></div>");
<% end %>
$('div#flash div').fadeOut(10000);

$("#products").prepend("<%=escape_javascript( render 'product_as_table_row', :product => @product))%>");
Run Code Online (Sandbox Code Playgroud)

现在,除了在我看来索引和创建之间的耦合比我更接近之外,我在我的js模板中有这个大胖子更新.我不知道如何将其抽象出来 - 我可以将其包装成一个方法吗?我把它放在哪里?即使它可以被包装到一个方法中,每个create.js和update.js模板都不需要调用那个函数而不是那个非DRY吗?这是3.1中视图继承的目的吗?你是否认为Ajax不需要flash,因为用户现在可以在页面上看到他的产品?

创作失败怎么样?这也会被抛入create.js.erb吗?

create.js.erb

<% if @thought.new_record? %>
  <%# ??? Throw in Validation-Error Form Updates? Display a Modal Dialog? %>
<% else %>
  $("#products").prepend("<%=escape_javascript( render 'product_as_table_row', :product => @product))%>");
<% end %> …
Run Code Online (Sandbox Code Playgroud)

jquery separation-of-concerns ruby-on-rails-3

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

nodejs并记录不同的模块

我只对下面的最佳方法感兴趣...

我有一个应用程序,由于维护原因和关注点分离,分为几个模块.我希望能够在我的应用程序启动时创建一个日志文件,然后使用我编写的不同模块写入同一个日志文件,而不会变得混乱并且导出的模块中有不需要的代码.

提前致谢.

logging separation-of-concerns node.js

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

在对表,其布局和记录建模时,如何避免代码重复,所有这些都共享相同的基本结构?

这将是一个有点抽象的问题.

我正在研究一个数据访问层框架,它需要区分表,它的抽象模式/布局和具体的表记录.我担心由于这种区别,会有很多代码重复.我可能需要一些方法来避免这种情况.

+-----------+
|    Foo    |
+-----------+
| +Id: Guid |
+-----------+
Run Code Online (Sandbox Code Playgroud)

请注意,此图可以描述以下任何一种:表模式,具体表或具体表记录,具有Id类型的字段Guid.

  • 架构中已知的所有内容都是字段的名称和类型.
  • 在具体(打开)表中,字段的"列索引"是另外已知的.
  • 有了记录,所有这些都是已知的,而且该字段具有特定的价值.

把它翻译成代码,我会得到很多类似的类型(成对的三种).我将使用接口来保持示例简短; 我要展示的是类型的相似性:

// these interfaces only need to be implemented once:

interface ISchemaField<T>  {  string Name  { get; }       }


interface ITableField<T>   {  string Name  { get; }        
                              int    Index { get; }       }

interface IRecordField<T>  {  string Name  { get; }        
                              int    Index { get; }       
                              T      Value { get; set; }  }
Run Code Online (Sandbox Code Playgroud)
// these three interfaces are an …
Run Code Online (Sandbox Code Playgroud)

c# data-access-layer code-duplication separation-of-concerns

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

这是重构ActiveRecord胖模型的正确方法吗?

例如,我有这个ActiveRecord模型:

应用程序/模型/ order.rb

class Order < ActiveRecord::Base
  # model logic
end
require "lib/someclass.rb"
Run Code Online (Sandbox Code Playgroud)

LIB/somelass.rb

class Order
  before_save :something
  # more logic here
end
Run Code Online (Sandbox Code Playgroud)

这是从模型重构/提取逻辑的好方法吗?或者可以使用关注类,服务类或其他东西?

refactoring ruby-on-rails separation-of-concerns

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