doushao1948 2014-01-20 00:25
浏览 60
已采纳

数据映射器模式,文件上载和单一责任原则与Doctrine 2

For a long time I have been using ActiveRecord-like approach for database entities (static classes retrieve rows from DB and instantiate the entity). I know it violates the single responsibility principle, but it somewhat seems more human to me. After reading a lot of articles how bad the AR is, I am trying to "get a data mapper mindset", but I am failing.

I am experimenting with Doctrine 2 in Symfony. I understand the separation of Repositories (they retrieve data from db) and Entities (they hold the data). What I don't know is, where am I supposed to place the process of saving uploaded file.

Let's say I have User entity and every user can save his photo. This photo's path should be stored in the entity, that's clear. But where do I define the path? And what object should save the uploaded photo to the target path?

I have seen the Symfony docs on this topic. They generate the URL within Entity object, but isn't this also violating the single responsibility principle? Why does entity (which only holds data) generate a path on filesystem (even relative)?

This bothers me a lot. I can't get the right mindset to be able to see the advantages of DM as it brings to me a lot of complications.

  • 写回答

2条回答 默认 最新

  • dongpo1599 2014-01-20 00:36
    关注

    You're correct - the example in the symfony docs violates the SR principle.

    A cleaner way of handling uploads would be creating a doctrine listener/subscriber that is responsible for handling this process outside of your entity.

    A very nice implementation is the VichUploaderBundle.

    It can be configured using annotations or YAML ...

    ... provides (optional) integration with the filesystem abstraction library Gaufrette by KnpLabs ...

    ... and is pretty easy to set up.

    I definitely recommend giving it a try or browse the source if you're looking for an implementation example.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 在不同的执行界面调用同一个页面
  • ¥20 基于51单片机的数字频率计
  • ¥50 M3T长焦相机如何标定以及正射影像拼接问题
  • ¥15 keepalived的虚拟VIP地址 ping -s 发包测试,只能通过1472字节以下的数据包(相关搜索:静态路由)
  • ¥20 关于#stm32#的问题:STM32串口发送问题,偶校验(even),发送5A 41 FB 20.烧录程序后发现串口助手读到的是5A 41 7B A0
  • ¥15 C++map释放不掉
  • ¥15 Mabatis查询数据
  • ¥15 想知道lingo目标函数中求和公式上标是变量情况如何求解
  • ¥15 关于E22-400T22S的LORA模块的通信问题
  • ¥15 求用二阶有源低通滤波将3khz方波转为正弦波的电路