[软件设计问题]高手请进,请说思路,此场景估计大家经常遇到,求一个好的解决方案

时间:2021-07-20 08:50:14
假设服务器返回用户状态,1=启用,2=禁用,客户端需要根据状态做相应的操作。 此时客户端写if == 1的时候可登录,2的时候不可登录, 当服务器的用户状态值改变为3=启用,4=禁用时,客户端的if判断就会失效,针对这种场景,求大神指导一种灵活的,通用的解决方案。

13 个解决方案

#1


到底有什么问题?没看明白。

不要用编程术语,用完全不懂编程的人说一下问题。要是你能把出现的问题给完全不懂变成的人说明白了,这才算是值得学习编程。反之如果因为学了编程而无法说明白用户需求了(满脑子只有技术名词儿了),那么编程时肯定也越来越乱。

#2


如果你想说“业务逻辑随便修改,数据库胡乱设置,而客户端代码与之不一致”,那么这想要什么解决方案?相关的胡乱修改数据库值人员要为自己的行为负责,应该面临被辞退啊?!还能怎样?

#3


客户端包含一个脚本引擎,服务器返回脚本,定义逻辑,客户端执行脚本。典型的,b/s系统+js可以实现。

#4


引用 2 楼 sp1234 的回复:
如果你想说“业务逻辑随便修改,数据库胡乱设置,而客户端代码与之不一致”,那么这想要什么解决方案?相关的胡乱修改数据库值人员要为自己的行为负责,应该面临被辞退啊?!还能怎样?


您说的有道理,理论上应该是一经定义,尽可能不变动。正是由于这种约定,一般情况客户端都采用硬编码方式。我是假设有可能发生变化了之后,客户端不改动任何代码的情况下,程序可以健壮的运行。

也就是说我想求得一种客户端不采用硬编码的方式的解决方案。若您有相关的经验或者思路,请不吝赐教。

#5


引用 3 楼 caozhy 的回复:
客户端包含一个脚本引擎,服务器返回脚本,定义逻辑,客户端执行脚本。典型的,b/s系统+js可以实现。


嗯呢, 谢谢,这个思路可行,您的方案是类似于动态编译执行的思路吧?例如服务器定义一套语法规则之类的,(i=3 ok i = 4 no),客户端加载这个规则,解析,并执行是吗? 

客户端可能是APP,浏览器,应用程序。

#6


客户端动态加载服务端的配置规则不就好了

#7


网页的话,相关脚本写js文件里,改js就好,怎么改都是改,反正也不影响用户那边的体验

app和应用程序的话可以做个升级功能啊,如果你给每个接口定义一个规则,后台更新下规则,不就相当于自动升级功能?

#8


楼主可以换个设计思路:
可不可登录,和用户状态代码是两种属性,

具体到楼主的例子,意思就是这样的:
用户状态定义:
UserStatusId:唯一标识,比如说GUID,序列,自增等
UserStatusName:比如:启用,禁用,
UserStatusCode:比如:1,2,3,4,
AllowLogon:bool值,只能是:1或者0

#9


对客户端来说,这就是需求变更,而且是那种很少发生的,有严重后果的改变。

所以在开发客户端时,根本没必要考虑将来会有这种变化。
否则肯定是过度设计,一天的活变成十天。


#10


对于允许登陆、不允许登陆,就只有两种情况,那么服务端就应该只返回bool值来显示告诉是否允许登陆,而不是返回状态码让客户端判断,这样客户端不就包含业务逻辑了

#11


其实就返回两个状态:TRUE Or FALSE,像1234什么的都不就是这两个值么

#12


连用户状态的定义都会变更的系统谁还敢用?

#13


此场景正常程序完全不会遇到,因为程序员们根本就不会这么做系统
1.数据里保存什么和逻辑判定没有关联
2.逻辑判定是业务逻辑的事情,不是客户端展示的事情。我凭啥要把自己的业务规定,展示给客户端?? 
3.正常逻辑是, {执行状态, 错误码,附属对象},而不是丢只一个错误码

#1


到底有什么问题?没看明白。

不要用编程术语,用完全不懂编程的人说一下问题。要是你能把出现的问题给完全不懂变成的人说明白了,这才算是值得学习编程。反之如果因为学了编程而无法说明白用户需求了(满脑子只有技术名词儿了),那么编程时肯定也越来越乱。

#2


如果你想说“业务逻辑随便修改,数据库胡乱设置,而客户端代码与之不一致”,那么这想要什么解决方案?相关的胡乱修改数据库值人员要为自己的行为负责,应该面临被辞退啊?!还能怎样?

#3


客户端包含一个脚本引擎,服务器返回脚本,定义逻辑,客户端执行脚本。典型的,b/s系统+js可以实现。

#4


引用 2 楼 sp1234 的回复:
如果你想说“业务逻辑随便修改,数据库胡乱设置,而客户端代码与之不一致”,那么这想要什么解决方案?相关的胡乱修改数据库值人员要为自己的行为负责,应该面临被辞退啊?!还能怎样?


您说的有道理,理论上应该是一经定义,尽可能不变动。正是由于这种约定,一般情况客户端都采用硬编码方式。我是假设有可能发生变化了之后,客户端不改动任何代码的情况下,程序可以健壮的运行。

也就是说我想求得一种客户端不采用硬编码的方式的解决方案。若您有相关的经验或者思路,请不吝赐教。

#5


引用 3 楼 caozhy 的回复:
客户端包含一个脚本引擎,服务器返回脚本,定义逻辑,客户端执行脚本。典型的,b/s系统+js可以实现。


嗯呢, 谢谢,这个思路可行,您的方案是类似于动态编译执行的思路吧?例如服务器定义一套语法规则之类的,(i=3 ok i = 4 no),客户端加载这个规则,解析,并执行是吗? 

客户端可能是APP,浏览器,应用程序。

#6


客户端动态加载服务端的配置规则不就好了

#7


网页的话,相关脚本写js文件里,改js就好,怎么改都是改,反正也不影响用户那边的体验

app和应用程序的话可以做个升级功能啊,如果你给每个接口定义一个规则,后台更新下规则,不就相当于自动升级功能?

#8


楼主可以换个设计思路:
可不可登录,和用户状态代码是两种属性,

具体到楼主的例子,意思就是这样的:
用户状态定义:
UserStatusId:唯一标识,比如说GUID,序列,自增等
UserStatusName:比如:启用,禁用,
UserStatusCode:比如:1,2,3,4,
AllowLogon:bool值,只能是:1或者0

#9


对客户端来说,这就是需求变更,而且是那种很少发生的,有严重后果的改变。

所以在开发客户端时,根本没必要考虑将来会有这种变化。
否则肯定是过度设计,一天的活变成十天。


#10


对于允许登陆、不允许登陆,就只有两种情况,那么服务端就应该只返回bool值来显示告诉是否允许登陆,而不是返回状态码让客户端判断,这样客户端不就包含业务逻辑了

#11


其实就返回两个状态:TRUE Or FALSE,像1234什么的都不就是这两个值么

#12


连用户状态的定义都会变更的系统谁还敢用?

#13


此场景正常程序完全不会遇到,因为程序员们根本就不会这么做系统
1.数据里保存什么和逻辑判定没有关联
2.逻辑判定是业务逻辑的事情,不是客户端展示的事情。我凭啥要把自己的业务规定,展示给客户端?? 
3.正常逻辑是, {执行状态, 错误码,附属对象},而不是丢只一个错误码