问题标签 [service-layer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
zend-framework - 您如何处理用户实体及其连接状态?
我目前正在使用 Zend Framework 和 Doctrine 2 开发一个项目,我对这两个工具都非常满意,但我想知道如何使用这个特殊的 User 对象,它共享数据库数据、会话数据(授权、参数、acl 等)
我经常看到这种实现:
对我来说,问题是我的 User 类是 Doctrine 使用的实体,这不是问题,但如果我的 User 具有一些复杂的角色和/或权限,它可能会添加一些业务逻辑。
顺便说一句,我不知道为什么(只是一种感觉,也许是错误的)但它看起来不是一个好主意,我很确定它有设计限制。
目前我的想法是使用 UserService,我已经尝试将这样的层用于我的其他实体,它看起来非常有趣。
类似的东西怎么样:
它可以让我使用其他服务,例如 IdentificationService,它可以将“用户”(或任何其他可能被授权的“资源”)存储到会话中并检查授权。
这同样适用于 AuthorizationService ,方法如下:
您对这种实施方式有任何反馈吗?和/或任何例子?
你觉得呢?你有没有什么想法?
谢谢你。
php - 我的服务应该实现事务和提交方法吗?
假设我想在我的UsersController
.
在我的UsersController
我做:
如果有很多用户,它可能会变慢,因为 UserService::updateUser 方法只是执行persist()
/flush()
所以我想知道做这样的事情是否是个好主意:
然后在我的UsersController
我可以做:
你有什么想法?
php - 使用服务层时如何处理错误?
在我的 Zend Framework 项目中,我使用了一个服务层,但是我真的不知道在哪里处理错误。
例如,假设我有一个UserService::updateUser($data);
如果我有:
id 为 2 的用户不存在?
您将在哪里以及如何处理此类错误?
php - 使用 Service Locator 将容器实例提供给 Service 是错误的吗?
我正在使用服务层,然后,我有很多服务,例如:
- 用户服务
- 文章服务
- 评论服务
- 授权服务
有时我需要使用另一个服务中的服务。
目前,我正在使用 sfServiceContainer 进行依赖注入,并在我的一些服务中注入我的 Doctrine 2 实体管理器,但是,我正在考虑切换并注入容器实例以便能够获取任何服务和 EntityManager。
但我被困住了,我不确定这是一个好主意。
php - 我的服务方法签名应该如何?
我正在使用一个服务层,直到现在我使用了一个 ServiceObject(它实现了 ArrayAccess、Iterator、Countable),但我想知道这是否是个好主意。
你会怎么做:
或者
在哪里$data
:
ServiceObject 的好处是为每个方法提供一个公共签名,但是有时它看起来效率不高,并且没有被广泛使用,它失去了它的兴趣。
任何反馈?
php - 你会使用断言还是动态 Acl?
我正在实现一个AuthorizationService
,基本上它扩展Zend_Acl
和覆盖authenticate()
方法以使用我自己的适配器。
假设我有User
, Article
, ArticleComment
, ArticleVote
, CommentVote
.
我的规则很简单:
- 会员可以编辑自己的文章
- 会员可以对任何条款进行投票
- 客人不能对评论投票
- 客人每天最多只能投 10 票。
但是,我不确定如何实现这一点,对于最后的规则,很容易,它应该是一个断言,但是,可以编辑自己的文章的成员呢?
我应该创建一个动态 Acl,并创建一个像“Article-545”和一个角色“User-5656”这样的资源,然后创建一个 Acl 规则,还是有一个更通用的“文章”资源和一个通用角色“用户”,并使用断言授权用户 545 编辑文章 5656?
你是怎么做的,有什么建议吗?
c# - 我应该如何将我的选择语句包装在事务中?
我要用 nhibernate profiler 扔掉我的网站,我收到了这条消息
警告:不鼓励使用隐式事务
http://nhprof.com/Learn/Alerts/DoNotUseImplicitTransactions
我看到它们出现在每一个 select 语句中。
我是否应该像提交时一样使用事务来包装我的 GetOrderHistory?
编辑
我如何将选择语句与事务包装在一起?会是这样吗?但是从不使用“事务”。
编辑
Ninject(也许我可以利用它来帮助我,就像我在获得会话时所做的那样)
编辑 3
如果我这样做
我收到此警报
如果我这样做
我可以摆脱错误,但可以得到意想不到的结果。
例如,当我返回 orderHistory 时,我会遍历所有这些并将“购买日期”转换为用户本地时间。这是通过我为列表创建的扩展方法完成的。
转换后,我将其设置为覆盖对象中的“购买日期”。这样,我不必为字段的一次更改创建新对象。
现在,如果我在调用提交之前进行日期转换,nhibernate 认为我已经更新了对象并需要提交它。
所以我在这个问题上悬赏。
- 如何创建我的方法,这样我就不必将每个方法包装在事务中?我已经在我的会话中使用了 ninject,所以也许我可以利用它,但有时我不得不在一个请求中执行多个事务。
所以我不知道每个请求只有一个交易是一个灵魂。
如何确保我为临时使用而更改的对象不会意外提交?
我如何才能在我的服务层中使用延迟加载。我不想在事务中包含我的延迟加载内容,因为它通常用于我的服务层。
当您使用存储库模式时,我发现很难找到如何做到这一点的示例。有了这些例子,一切都写在同一个事务中,我不想在我的服务层有事务(这是回购的工作而不是我的业务逻辑)
php - 在哪里放置 OAuth 逻辑?
我在一个项目中使用 Zend 框架,并且我正在创建一个仅用于身份验证的控制器。在这个项目中,我们将接受用户通过 facebook、twitter、myspace 等其他网站的帐户进行注册。为此,我们将使用 OAuth。但我有一个疑问,我应该把每个 OAuth 站点相关身份验证的逻辑放在哪里?例如只有facebook,在我的控制器中占据了50行代码,这样我的控制器就不会瘦了……
我想知道我应该把这个放在哪里。为每个站点创建一个 Zend_Auth 适配器,只为此创建一个服务,最好的方法是什么?
对不起可怜的英语。:)
architecture - 工作范围单位
我有一个将 webforms 用于前端和 mvc 用于管理控制台的解决方案。
两个 UI 都通过 Ninject 使用服务层,我无法解决一个微妙但相当重要的问题。
假设我有一个 CourseService,它根据字符串搜索词返回课程列表 - 该服务返回搜索结果,但我还需要记录进行的搜索以及与该词匹配的课程数量,以用于管理信息目的。
我开始的想法是,工作单元将由 UI 提交,在请求结束时,在页面方法中,例如按钮单击事件。这同样适用于控制器。
这里的问题是我依赖 UI 开发人员在工作单元上调用 Commit() 以便记录搜索。UI 开发人员可以在不调用 commit 的情况下愉快地继续工作,并且会返回结果 - 但不会记录搜索。这导致我决定让服务层控制工作单元的范围。Ninject 将自动将工作单元传递给服务层和存储库实现,这将与我告诉 ninject 根据请求范围创建它实际上是同一个实例。
这是我的图层如何编写的示例...
在上面的评论中,您可以看到我觉得我“应该”在哪里提交我的更改,但我觉得通过允许服务层和存储库实现来控制事务的范围,我可能忽略了一个更大的问题。
除此之外 - 当我的存储库需要保存一个新对象,并以完整的新给定主键返回它时,如果我在返回对象后从 UI 调用 Commit,则不会发生这种情况。所以存储库有时确实需要管理工作单元。
你能看到我的方法有什么直接的问题吗?
c# - 使用 Ninject 将当前用户注入我的域
我在将当前登录用户注入我的服务层时遇到问题,我正在尝试类似于代码营服务器的东西,但很难弄清楚为什么我的代码不起作用......
我的应用程序:UI 层 -> 连接到域服务 -> 连接到 Repo 层...
Repo 未连接到 UI,所有内容都经过检查验证并从 DomainService 层传回......
我的代码:
//这是在我的域服务中声明的
在我的 Web 应用程序中,我想实现这个服务,然后将它注入到我的服务层中(这就是我卡住的地方):
我想做的是:从身份验证服务中获取登录用户,但是这不起作用,所以我删除了代码......
我绑定 global.asax 中的所有内容,例如:
首先:当我尝试使用使用 IUserSession 的服务时遇到异常,它说请为控制器 x 提供默认的无参数构造函数,但是如果我从域服务中删除引用,一切正常......
服务总监:
有没有更好的方法/更简单的方法来实现这个?
在下面回复的帮助下更新我设法完成了这项工作,如果有人想知道我是如何做到的,我已经上传到 github...