我正在处理应用程序的前端。我必须再介绍一个过滤标准LoanNumber。现在贷款数量是E-100。业务层和域对象不在我的控制之下。所以我无法改变它。持有loannumber的域对象是整数,我必须这样做
ingeoFilterData.intLoanNumber="E-100"
ingeoFilterData是域对象。 intLoanNumber被声明为Nullable Int32现在这个domainobject是非常关键的,它会转到某些外部引擎,所以我无法改变它。
请建议一些解决方法。
编辑 -
我正在从数据库表中复制loannumber。
RT1
RT2
PT1
pt10
PT11
PT12
PT13
PT14
PT15
pt16
pt17
pt8
pt9
MDR1
MDR2
MDR3
答案 0 :(得分:10)
如果你只有一个角色,你可以这样做:
将你的int乘以100.(例如E-51 - > 5100)
然后将char保留为数字的其余部分(例如5106)。
当您需要显示UI ID(E-51)时,请执行相反操作。
如果你没有限制(正如你所提到的那样)那么你可以把你的int作为一个协议(根据我的说法,因为你受到Int32 - 4,294,967,296的限制而更加困难)。
您可以将您的号码设置为
<meaning><number><meaning><number>
和意思是 - 1 - 数字,2 - 字母,3 - hyphon。
那么11将意味着1; 201表示A,3表示hyphon,113201表示1-A;
这很复杂,不太可能有用......
此解决方案将您的ID限制为5个数字或3个字母和1个数字的长度。您可以使用int bit-wize来挤压更多内容,并尽可能优化“协议”。
我希望这有帮助, Danail
答案 1 :(得分:0)
“E-100”是一个字符串。即。 E不是变量吗?
不,您不能将int设置为字符串值。
答案 2 :(得分:0)
不,int类型不能存储字符串。但是,在将此值传递给域对象进行过滤之前,您可以将值解析为int。
答案 3 :(得分:0)
如果贷款号码的“前缀”始终为“E-”,您可以将其排除在外 否则,您可以添加属性“LoanNumberPrefix”并在其中存储“E-”。
答案 4 :(得分:0)
不幸的是,在某些时候,糟糕的设计会给你带来无法解决的问题。
我不知道这是否是其中之一,但如果域名模型已指定贷款号码是整数,那么你或者那个制造该模型的人显然没有完成他们的工作。
为什么E在那里?它意味着什么?它只是一个前缀,您可以在存储它时将其删除并在显示之前将其放回去吗?
不幸的是,如果前缀可以改变,那么在某些时候你将拥有F-100等等,那么你需要找到一种方法将其编码为你发送给域模型和业务逻辑的整数。 / p>
如果你不能这样做,你需要找到一个不同的地方来存储该前缀,或者可能是整个代码。
如果你做不到,那么你就搞砸了。
但是直言不讳地说,这对于在设计时睡着了的人来说很难闻。
“是的,这是一个好主意,我们会将贷款识别号码设为一个整数。我知道某个地方,某个地方有人举例说明这些贷款识别号码的样子,但这只是数字吗?我的意思是什么可能出错...?“
答案 5 :(得分:0)
我认为如果你可以将char转换为ASCII码,那是可能的。
string --- ASCII
0-10 --- 48-57
A-Z ---- 65-90
A-Z ---- 97-122
查看ASCII table了解更多信息..
所以你可以转换
RT1至082084049
RT2至082084050和
MDR3至077068082051
如果值不是3位数,我只是将0添加到每个字符(因为最大可能的ASCII(z)值是3位数)。 R实际上是82,它变成082.最后的整数(没有数字)将是3的倍数。
这有助于在另一端提取信息。只需将其拆分为单独的3位数值,然后将它们转换为char并附加它们。你会得到最后的字符串。
082,084,049 - R,T,1。多数民众赞成。
p.s:此方法可能最终导致大字符串的算术溢出问题
答案 6 :(得分:0)
我建议您与业务/域层中的某个人交谈,或者负责系统设计的人员,并指出他们需要将loannumber更改为字符串。没有人会感谢你躲避你的代码来解决什么是设计缺陷 - 它只会导致麻烦和混乱。