今天我与一个java后端开发人员进行了一次相当热烈的讨论。我用jsangular做前端。他的休息服务给我发送了一个包含枚举的对象。我把它作为一个字符串,需要以角度网格显示。
这些枚举很容易解释。
我得到的例子:
Person = {gender: "MAN", position: "IS_EMPLOYED"}
在视图中,我必须显示以下内容:
man is employed
所以我用一种简单而通用的方式解决了它:
Person.gender.toLowerCase () + ' ' + Person.position.toLowerCase ().replace ('_', ' ')
他发现了这个可怕的编程,并要求我用if else或switch制作一个mapper
所以:If(Person.gender==="MAN") return "man"
Else if....
标签名称始终与枚举名称相同(仅小写和空格而不是下划线)
他横冲直撞,编码很糟糕,基本上是可怕的,也是对上帝的罪......
所以我的问题是这个糟糕/良好的做法(所以是个黑白故事)还是在某些情况下可以接受和可以辩护?
在我的手机上输入,因此我无法将代码示例放在正确的标签中。
答案 0 :(得分:1)
创建客户端枚举映射可能是个更好的主意 - 然后只返回实际值。所以你可以:
var personTypes: {
"1": "Is Employed",
..
}
然后简单地将1
作为枚举发送回来并使用查找对象:
console.log("Person status: " + personTypes[Person.position]);
这样也可以更容易地显示类型列表 - 选择一个新类型,然后简单地发回枚举:
<select ng-model="personTypeEnum" ng-options="enum as type for (enum, type) in personTypes"></select>
答案 1 :(得分:1)
有几种方法可以看待这个:
映射更强大:
他说是应该有一个完整的映射功能是正确的。这允许您处理错误(即,如果您为position
获得的响应是“香蕉”,您可能不应该只是将其丢弃)。当您可能使用严格的模式时,这在后端开发中尤为重要。
比例事项: 您的方法没有技术上错误。如果有少量条目或者用户群或应用程序范围很小,则可能无关紧要。它并不真正符合最佳实践,但它有效,如果这一切都很重要,那就足够了。虽然你应该始终追求最佳实践,但你需要牢记大局。
<强>效率:强> 一种方法可能比另一种更有效。差异可以忽略不计。在web dev中,速度是一个优先事项,如果两种方法都得到相同的结果,但速度要快一些,那就选择那个。
答案 2 :(得分:0)
使用打印对象检入控制台。 例如,如果object是person,那么如果您将此对象呈现为json,则gender(enum)将为
{"success":true,"person":[{"class":"person","id":26,"comment":null,"gender":{"enumType":"com.project.Person$Gender","name":"MEN"},
所以你可以打印person.gender.name,这将给出MEN