小编Ben*_*min的帖子

使用YUI3(Y.App)和Symfony2逐步增强

我们实际上使用Symfony 2 PHP框架和Twig作为模板引擎.我们认为我们可以避免View层的代码重复,并从渐进增强(p-jax)中受益.

当前状态:

PJAX不会根据路由处理页面布局的部分更新.我们的目标是实现一个系统,当Y.App(路由)处理导航时,只会更新一些页面"片段"(HTML节点).

在这方面,我们开始实施POC:https://github.com/benjamindulau/PocSfYui/ 可在此处找到Javascript:https://github.com/benjamindulau/PocSfYui/tree/master/src/Acme/PocBundle/Resources/public/js 和Y.App初始配置:https://github.com/benjamindulau/PocSfYui/blob/master/src/Acme/PocBundle/Resources/views/layout.html.twig#L66

我们的想法是,当我们第一次加载页面时,一切都在服务器端处理(渐进增强),这意味着整个页面和页面片段由服务器呈现.对于应由Y.App执行的下一个请求,我们定义了一个JSON格式,如下所示(/ photos path response):

{
    "title": "MyAwesomeWebsite - Photos", // page <title>,
    "fragments": {
        "sidebar": "<h2>Sidebar Menu<\/h2><!-- etc.... -->", // ..... maybe an updated menu for active page
        "main": "<h2>Photos<\/h2><div id=\"photo-list-container\"><ul id=\"photo-list\"><!-- photo items.... --></ul></div>", // Pre-rendered photo list
    },
    "templates": {
        "photo_item_tpl": "<li data-id=\"{{index}}\"><img src=\"{{url}}\" alt=\"{{title}}\" \/><\/li>" // template used later by Y.App for adding new photos
    }
}
Run Code Online (Sandbox Code Playgroud)

这基本上是当前视图内容(路由)的"JSONified"版本.

在服务器端,我们检测到请求来自Y.App而不是渲染我们的Twig模板,我们从中提取"块"并构造此JSON响应,其中包含需要更新的页面片段+客户端需要的手柄模板这个特定的页面.

在客户端(Y.App): …

progressive-enhancement yui3 symfony

8
推荐指数
1
解决办法
230
查看次数

CQRS和同步操作(如用户注册)

我正在采用DDD概念来设计我们的下一个项目,更具体地说是CQRS.

在阅读了很多东西后,我现在正试图实现一个简单的概念验证.

事情是我开始后就被困住了:p

我正在尝试将此方法应用于简单的用户注册过程,其中的步骤是:

  • 用户填写注册表并提交请求
  • 该应用程序创建用户
  • 该应用程序验证用户(自动登录)
  • 该应用程序向用户发送验证电子邮件
  • 该应用程序通过确认消息将用户重定向到其他位置

从实现的角度来看,到目前为止我得到的是:

  • 控制器操作将请求数据映射到RegisterCommand对象
  • 控制器操作要求命令总线处理RegisterCommand
  • 命令处理程序(UserService)"register"方法创建一个新的User对象(无论是通过新命令还是工厂对象)
  • 该模型引发了RegisterEvent
  • 命令处理程序要求存储库存储新的用户对象

就是这样,控制器动作不知道任何一个.

所以,我的猜测是,因为这个上下文中的所有东西都要同步完成(除了电子邮件发送),我可以使用直接/同步命令总线,并在控制器操作中,在命令总线调用之后,我可以查询对于只读用户(查询数据库),如果它存在假设一切顺利,那么我可以给用户一个确认消息.

自动登录过程由事件处理程序处理.

假设这是正确的,如果出现问题怎么办,如何通知用户正确的信息?

我们可以通过互联网找到的文章中经常使用一个常见的例子:客户使用过期的信用卡支付订单.系统接受请求,通知用户一切正常,但用户几分钟后收到一封电子邮件,告诉他无法处理他的订单.

嗯,在许多情况下,这种情况是可以接受的,但对于其他一些情况,这是不可能的.那么处理这些用例的例子在哪里?:p

谢谢 !

domain-driven-design cqrs domain-events

8
推荐指数
1
解决办法
2408
查看次数

CQRS/DDD:虚拟博客/帖子/类别/标签示例

仍在深入研究CQRS实施实验,我决定从头开始浏览我的博客并将其用作沙盒.

我阅读了很多有关有界背景的内容,在我看来,这是所有这些中最精巧的方法,也许是解释和应用于实际项目中最困难的方法.

幸运的是,我的域名非常简单;-)

我尝试识别不同的有界上下文,并确定哪个模型成为每个上下文中的聚合根.

域规则非常简单:

  • 作家 撰写博客文章时,他必须选择一个类别来保存他的帖子,并且他可以选择多个标签来提高他的帖子可见性

  • 读者访问博客时,他可以按类别标签浏览博客帖子

只有这些规则,我们已经得到了几个有界的背景,我是对的吗?

  • 用户(编写者)编写后置上下文.在这些上下文中,Post是聚合根

  • 用户(读者)按类别浏览帖子.在这些上下文中,Category是聚合根.

  • 用户(读者)按标签浏览帖子.在这种情况下,好吧,我不确定...... ;-)

我认为对吗?

鉴于我(右),我想知道,在执行这个时,谁负责创建不同的对象和关系?

以用户撰写新博客帖子的上下文为例,我真的不知道应该在哪里创建标签实例,以及我是否应该在写模型中创建Post及其标签之间的关系.类别也是如此,不知道:p

另外,有界上下文是否意味着特定的模型?这意味着对于每个有界上下文,我会有一个不同的对象图(在写模型中)?

需要一些脑电波来清楚地看到这一点;-)

为了添加新帖子,到目前为止,我的控制器要求命令总线处理"ComposeCommand",处理程序(PostService)创建一个新的"Post"实例,在其上调用compose方法并最终要求写入持久性以保存最新帖子.

Post :: compose()方法引发一个"PostComposedEvent"事件,读取模型侦听该事件以更新其数据.

在所有这些我不知道如何介绍"类别"和"标签".

谢谢.

domain-driven-design cqrs

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