【发布时间】:2014-07-16 15:40:09
【问题描述】:
我现在正在处理一个大项目,该应用正在利用许多不同的服务,例如: 评论、点赞、发帖、购买等..
每个服务都有一个类。
现在,我想限制注册用户的某些操作,例如发帖、评论等。
到目前为止,每个类都只有类方法,如下所示:
@interface UpdateOrderServies : NSObject
+(void)deleteOrder: (STOrder *)order
andReturn: (void(^)(NSError *error))errorBlock;
+(void)updateOrder: (STOrder *)order
andReturn: (void(^)(NSError *error))errorBlock;
但是现在,我想先检查用户是否已注册,如果没有,则不返回值。 所以我想出的最好方法是将课程更改为单音,并在每次调用课程时询问用户是否像这样注册:
+(id) getInstance {
static UpdateOrderServies *__sharedDataModel = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
__sharedDataModel = [[UpdateOrderServies alloc]init];
});
if (![__sharedDataModel userIsRegisterd]) {
return nil;
}
return __sharedDataModel;
}
它有效,但是,正如您所见,它不是一个很好的答案.. 我想要更通用的东西。 我正在考虑使用 Typhoon 依赖注入,但如果用户已注册,我没有地方可以检查每个调用...... 有更好的方法来处理这个问题吗?更有活力...
【问题讨论】:
-
为什么不识别用户,当他们第一次“登录”或以其他方式识别自己时,使用封装所有授权等的“能力”对象。使用它而不是简单的用户 ID 来识别用户,并查询该对象以测试用户的能力。
-
@HotLicks "为什么在用户登录时不识别用户" . .这一步就是认证。接下来是定义调用给定服务所需的权限——这部分称为授权。我们可以将授权作为每个服务调用的一部分,但这会破坏单一责任原则 - 因此推荐 AOP。
-
@JasperBlues - 您将“责任”放在用户的能力对象中。必须提供执行授权操作的能力。对我来说,这似乎是一个“单一责任”计划。
-
@HotLicks 能力对象是,但是如何执行授权 - 即评估能力对象?由于这是一个“横切”要求,因此必须重复应用。事实上,在解释 AOP 时,安全性是一个常见的例子。 (我相信其他人可以比我更好地解释它)。 . en.wikipedia.org/wiki/Aspect-oriented_programming
-
AOP一直是寻找问题的解决方案,我不明白这是怎么回事。能力对象封装了保留授权信息或在调用时访问它所需的任何内容。它是具有单一职责的单一控制点。
标签: objective-c typhoon