think-orm icon indicating copy to clipboard operation
think-orm copied to clipboard

提供模型字段类型转换的统一接口

Open NHZEX opened this issue 4 years ago • 10 comments

相对比现在的__construct__toString组合灵活一些。

NHZEX avatar Jan 11 '21 10:01 NHZEX

Codecov Report

Merging #210 (e6366c3) into 2.0 (c6e4c5a) will decrease coverage by 0.00%. The diff coverage is 0.00%.

Impacted file tree graph

@@            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.

codecov-io avatar Jan 24 '21 13:01 codecov-io

没必要弄这个接口的,如果某个现成的类 没有__toString 或者实构造方法不符合的 就定义个子类 重写下__toString方法或者构造方法就可以了 专门弄个接口反而太麻烦了

yunwuxin avatar Jan 24 '21 13:01 yunwuxin

没必要弄这个接口的,如果某个现成的类 没有__toString 或者实构造方法不符合的 就定义个子类 重写下__toString方法或者构造方法就可以了 专门弄个接口反而太麻烦了

继承类这个方案原来考虑过,但这样会产生很多重复的类,而且不够灵活,用接口就不需要重写类了,实现一下方法就行,而且通过接口返回了字段名和模型实例,可以在里面实现更丰富的构造处理。

ps:现在这个类型转换主要应用在把各种序列化的值构建为实体对象。

NHZEX avatar Jan 24 '21 13:01 NHZEX

如果那个类是你自己写的 本身就可以直接修改构造方法 和 toString

如果那个类是某个类库里面的 接口的方式 不也是要重新写个类来实现这个接口么

yunwuxin avatar Jan 24 '21 13:01 yunwuxin

这样也是为了 能最大限度的使用php本身有的机制,而不必额外增加一些接口

yunwuxin avatar Jan 24 '21 13:01 yunwuxin

如果那个类是你自己写的 本身就可以直接修改构造方法 和 toString

如果那个类是某个类库里面的 接口的方式 不也是要重新写个类来实现这个接口么

类确实是项目内的管理的,主要还是不想改掉__construct__toString,因为这些类不仅限用于模型类型转换,又不想重写产生很多仅用于类型转换的类(原本之前是通过获取器、设置器实现的,看到了v2.0.35的更新才考虑通过模型类型统一转换)。通过接口顺便就顺便传递模型的实例方便做其他扩展。

ps:这个PR的内容目前也能在用户层重写实现,要不要合入库看看你们的意见如何。

NHZEX avatar Jan 24 '21 14:01 NHZEX

我了解你的意思了 你是项目里只写一个静态类来实现这个接口 然后所有的类型 都在这个静态类里处理
但是这样就会导致type里定义的类型和这个字段最终的类型不相符合 这样的设计和type的初衷有点相悖

yunwuxin avatar Jan 24 '21 14:01 yunwuxin

type是获取器和修改器的一个规范补充,不是用来替代获取器和修改器的

yunwuxin avatar Jan 24 '21 14:01 yunwuxin

type是获取器和修改器的一个规范补充,不是用来替代获取器和修改器的

可能我解释得不太对,之前用获取器和设置器是因为我发现类型转换是实时处理的,如果往模型放类型实例会导致实例无法持久化,性能也不好,所以用获取器和设置器加上对象缓存解决这个问题。

v2.0.35调整了这个问题,所以我放心用模型的类型转换。目前是一个类只处理一种类型,但在反序列化数据构建类时可能会因为数据升级或者一些业务问题导致需要模型的实例其他字段来辅助构建或者恢复数据,而且考虑到不想重写类相关方法,才考虑用接口定义统一的静态转换方法来处理。

ps:明天我截取一些业务参考上来看看吧

NHZEX avatar Jan 24 '21 15:01 NHZEX

Codecov Report

Merging #210 (713a4e0) into 2.0 (0b01a19) will increase coverage by 6.27%. The diff coverage is 62.50%.

Impacted file tree graph

@@             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.

codecov-commenter avatar May 19 '21 10:05 codecov-commenter