think-orm
think-orm copied to clipboard
提供模型字段类型转换的统一接口
相对比现在的__construct
加__toString
组合灵活一些。
Codecov Report
Merging #210 (e6366c3) into 2.0 (c6e4c5a) will decrease coverage by
0.00%
. The diff coverage is0.00%
.
@@ Coverage Diff @@
## 2.0 #210 +/- ##
==========================================
- Coverage 7.36% 7.35% -0.01%
- Complexity 2841 2843 +2
==========================================
Files 62 62
Lines 6739 6744 +5
==========================================
Hits 496 496
- Misses 6243 6248 +5
Flag | Coverage Δ | Complexity Δ | |
---|---|---|---|
unittests | 7.35% <0.00%> (-0.01%) |
0.00 <48.00> (ø) |
Flags with carried forward coverage won't be shown. Click here to find out more.
Impacted Files | Coverage Δ | Complexity Δ | |
---|---|---|---|
src/model/concern/Attribute.php | 0.00% <0.00%> (ø) |
125.00 <48.00> (+2.00) |
Continue to review full report at Codecov.
Legend - Click here to learn more
Δ = absolute <relative> (impact)
,ø = not affected
,? = missing data
Powered by Codecov. Last update c6e4c5a...e6366c3. Read the comment docs.
没必要弄这个接口的,如果某个现成的类 没有__toString 或者实构造方法不符合的 就定义个子类 重写下__toString方法或者构造方法就可以了 专门弄个接口反而太麻烦了
没必要弄这个接口的,如果某个现成的类 没有__toString 或者实构造方法不符合的 就定义个子类 重写下__toString方法或者构造方法就可以了 专门弄个接口反而太麻烦了
继承类这个方案原来考虑过,但这样会产生很多重复的类,而且不够灵活,用接口就不需要重写类了,实现一下方法就行,而且通过接口返回了字段名和模型实例,可以在里面实现更丰富的构造处理。
ps:现在这个类型转换主要应用在把各种序列化的值构建为实体对象。
如果那个类是你自己写的 本身就可以直接修改构造方法 和 toString
如果那个类是某个类库里面的 接口的方式 不也是要重新写个类来实现这个接口么
这样也是为了 能最大限度的使用php本身有的机制,而不必额外增加一些接口
如果那个类是你自己写的 本身就可以直接修改构造方法 和 toString
如果那个类是某个类库里面的 接口的方式 不也是要重新写个类来实现这个接口么
类确实是项目内的管理的,主要还是不想改掉__construct
、__toString
,因为这些类不仅限用于模型类型转换,又不想重写产生很多仅用于类型转换的类(原本之前是通过获取器、设置器实现的,看到了v2.0.35
的更新才考虑通过模型类型统一转换)。通过接口顺便就顺便传递模型的实例方便做其他扩展。
ps:这个PR的内容目前也能在用户层重写实现,要不要合入库看看你们的意见如何。
我了解你的意思了 你是项目里只写一个静态类来实现这个接口 然后所有的类型 都在这个静态类里处理
但是这样就会导致type里定义的类型和这个字段最终的类型不相符合
这样的设计和type的初衷有点相悖
type是获取器和修改器的一个规范补充,不是用来替代获取器和修改器的
type是获取器和修改器的一个规范补充,不是用来替代获取器和修改器的
可能我解释得不太对,之前用获取器和设置器是因为我发现类型转换是实时处理的,如果往模型放类型实例会导致实例无法持久化,性能也不好,所以用获取器和设置器加上对象缓存解决这个问题。
v2.0.35
调整了这个问题,所以我放心用模型的类型转换。目前是一个类只处理一种类型,但在反序列化数据构建类时可能会因为数据升级或者一些业务问题导致需要模型的实例其他字段来辅助构建或者恢复数据,而且考虑到不想重写类相关方法,才考虑用接口定义统一的静态转换方法来处理。
ps:明天我截取一些业务参考上来看看吧
Codecov Report
Merging #210 (713a4e0) into 2.0 (0b01a19) will increase coverage by
6.27%
. The diff coverage is62.50%
.
@@ Coverage Diff @@
## 2.0 #210 +/- ##
============================================
+ Coverage 11.79% 18.06% +6.27%
- Complexity 2847 2855 +8
============================================
Files 62 62
Lines 6750 6770 +20
============================================
+ Hits 796 1223 +427
+ Misses 5954 5547 -407
Flag | Coverage Δ | Complexity Δ | |
---|---|---|---|
unittests | 18.06% <62.50%> (+6.27%) |
2855.00 <54.00> (+8.00) |
Flags with carried forward coverage won't be shown. Click here to find out more.
Impacted Files | Coverage Δ | Complexity Δ | |
---|---|---|---|
src/model/concern/Attribute.php | 34.53% <62.50%> (+34.53%) |
124.00 <54.00> (+8.00) |
|
src/db/Builder.php | 34.15% <0.00%> (+0.67%) |
196.00% <0.00%> (ø%) |
|
src/db/Connection.php | 51.42% <0.00%> (+2.85%) |
32.00% <0.00%> (ø%) |
|
src/db/Query.php | 9.40% <0.00%> (+6.83%) |
46.00% <0.00%> (ø%) |
|
src/DbManager.php | 58.22% <0.00%> (+7.59%) |
37.00% <0.00%> (ø%) |
|
src/db/PDOConnection.php | 60.92% <0.00%> (+8.88%) |
258.00% <0.00%> (ø%) |
|
src/db/BaseQuery.php | 25.74% <0.00%> (+9.11%) |
199.00% <0.00%> (ø%) |
|
src/db/builder/Mysql.php | 65.43% <0.00%> (+10.49%) |
53.00% <0.00%> (ø%) |
|
src/db/concern/TableFieldInfo.php | 47.36% <0.00%> (+15.78%) |
10.00% <0.00%> (ø%) |
|
src/model/concern/Conversion.php | 17.09% <0.00%> (+17.09%) |
59.00% <0.00%> (ø%) |
|
... and 6 more |
Continue to review full report at Codecov.
Legend - Click here to learn more
Δ = absolute <relative> (impact)
,ø = not affected
,? = missing data
Powered by Codecov. Last update 0b01a19...713a4e0. Read the comment docs.