小编Daw*_*iak的帖子

Node.js应用程序中的域驱动设计

TL; DR; 我正在寻找DDD node.js应用程序的一些例子.


嗨,

我要创建节点应用程序.我想知道我找不到任何在域中分离业务逻辑的应用程序示例.

好的,有一些例子:https: //github.com/adrai/node-cqrs-domain - 但这是整个CQRS与事件采购实现.

我的想法是那样做:

//domain/book.js
function Book(title, author)
{
  this._title = title;
  this._author = author;
}

// domain methods ...

//infrastructure/persistance/repository/book-repository.js
function BookRepository()
{}

BookRepository.prototype.save(book)
{
  var bookModel = mappers.mapToOrm(book);
  return bookModel.save();
}

// [...] get, getAll, getNextId

//infrastructure/persistance/orm/book.js
//using http://bookshelfjs.org/
var Book = bookshelf.Model.extend({
  tableName: 'books'
});

//infrastructure/mappers/book-mapper.js
function mapToOrm(book) {
  //mapping [...]
  return new persistance.Book();
}

function mapToDomain(domain) {
  //mapping [...]
  return new domain.Book();
}
Run Code Online (Sandbox Code Playgroud)

但另一方面,我从未见过任何类似的解决方案(使用域模型,orm模型,存储库和映射器).我是以正确的方式思考的吗?也许没有理由在node.js应用程序中分离域中的业务逻辑.如果是这样,为什么?如果没有,你能给我一个DDD实现的例子或改进我的代码吗?

[2017年1月13日]

我在TypeScript中创建了示例应用程序.目前没有存储库,没有太多服务.欢迎提出问题和拉取请求. https://github.com/dawiddominiak/ddd-typescript-bin-packing-problem-solution

javascript domain-driven-design node.js

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

如何避免使用Symfony与管理面板创建者的setter?

我想在我的实体中避免使用getter/setter地狱(这是原因:http://ocramius.github.io/doctrine-best-practices/#/53),但两个最受欢迎的管理面板生成器:

需要getter和setter来呈现视图.

我的想法是创建DTO对象(http://ocramius.github.io/doctrine-best-practices/#/57),然后使用命名构造函数来创建实体.我想在我的服务中调用命名构造函数.强制管理面板生成器使用我的DTO来持久保存/更新数据的最佳方法是什么?在这种情况下,您能给我一个想法和/或良好实践示例吗?

我想象的唯一方法是使用DTO而不是真实实体,调用prePersist/preUpdate挂钩并使用自定义服务,但它看起来很混乱.

domain-driven-design dto symfony doctrine-orm

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

Symfony2 Doctrine自定义存储库类[语义错误]第0行,第14行靠近'Project p':错误:类'Project'未定义

我是Symfony 2和Doctrine的新手,有一个简单的问题:

我的存储库中有一个非常简单的代码:

<?php

namespace BakeryIT\BakeryBundle\Entity;

use Doctrine\ORM\EntityRepository;

class ProjectRepository extends EntityRepository
{
    public function findHistory(){
        return $this->getEntityManager()
        ->createQueryBuilder()
        ->select('p')
        ->from('Project','p')
        ->getQuery()
        ->getResult();
    }
}
Run Code Online (Sandbox Code Playgroud)

我的控制器中有两个简单的功能:

<?php

namespace BakeryIT\BakeryBundle\Controller;

/*
...
*/

class ProjectController extends Controller
{
    public function indexAction()
    {
        return $this->index('Project', 'findHistory');
    }
}
Run Code Online (Sandbox Code Playgroud)

控制器看起来像这样:

public function index($entity, $query = 'findAll')
{
    $repository = $this->getDoctrine()
        ->getRepository('BakeryBundle:'.$entity);

    $data = $repository->$query();

    return $this->render('BakeryBundle:'.$entity.':index.html.twig',
    array('data' => $data));
}
Run Code Online (Sandbox Code Playgroud)

这段代码告诉我在"Project p"附近的语义错误[Semantical Error]第0行第14行:错误:未定义类'Project'.

另一方面,如果我在我的存储库中更改此行,一切都很完美:

->from('Project','p')
Run Code Online (Sandbox Code Playgroud)

->from('BakeryIT\BakeryBundle\Entity\Project','p')
Run Code Online (Sandbox Code Playgroud)

我不知道为什么这个例子在第一种情况下不起作用.我的BakeryIT\BakeryBundle\Entity\Project中的命名空间以这种方式设置:

namespace BakeryIT\BakeryBundle\Entity; …
Run Code Online (Sandbox Code Playgroud)

php symfony doctrine-orm

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