开发亲友计算器逻辑思考过程
由于业务需求,需要实现亲友计算的功能.
1 . 直接采用匹配的方式.
看到需求时,首先想到去网上查找了下,有没有类似的demo.由于我是Android开发,没有找到相对应源码,然后就考虑自己动手写.我在Github上找到了使用js实现的demo,简单的了解了下实现原理:拿到需要计算的数值,做出相对应的组合,例如:哥哥的哥哥,直接变成哥哥.然后把组合的结果,直接去匹配自己写的表达式, 例如:爸爸的儿子的爸爸的爸爸 会直接组合成 爸爸的爸爸 然后去匹配 爸爸的爸爸是爷爷 这样的方式.然后得出结果.但是这种组合方式至少有几千种,而且性能很差.我要自己动手写,显然很啰嗦,麻烦.
2 . �分布计算
对于这种关系处理首先我想到的是采用两种组合计算的方式,就是一步一步计算过去. 例如 爸爸的哥哥的儿子的妻子 我先计算爸爸的哥哥得出大伯,大伯的儿子得出堂哥或者堂弟然后妻子为堂嫂,堂弟媳.但是不能使用文字来匹配,不然太庞大了,想着对于每一个人都要一个数字来对应,就是我代表0,爸爸代表1,妈妈代表2... 把所有的�亲戚关系都以一个数字来代替,我还很聪明的把男的用作单数,他的妻子用着双数,这样对于一个人的妻子或者丈夫就直接可以使用+1,-1来计算了.当然这些只是思路,按照这个逻辑关系继续思考的话,会发现并不比第一种方式容易.因为每一个关系都有几种计算方式,对于每个代表的数值都需要进行几种计算,就是对于1(爸爸),我需要算出他的兄弟姐妹,父母,子女和自己的关系,2(妈妈)一样还是要把所有的情况列举出来.繁琐程度不亚于第一种情况,而且还会有很多不健全的地方,例如 爸爸的儿子的妻子 答案有三个 嫂子,弟媳,老婆. 如果在远一点 爸爸的爸爸的儿子的儿子的老婆 则有 嫂子,弟媳,老婆,堂嫂,堂弟媳.这种方式完全不能实现.
3.直接计算.
爷爷的孙媳妇有嫂子,弟媳,老婆,堂嫂,堂弟媳 ,爸爸的儿媳有嫂子,弟媳,老婆 ,看到这里时,突然一个新的思路出现了,对于一个人或者说一个身份来说,他的后代的叫法都是一致的,我哥哥的下一代一定是我的侄辈,男的是侄子,女的是侄女.我姐姐的是儿子是外甥,女儿是外甥女.我大伯的儿子一定是我的堂哥或者堂弟,你要计算某个人和你的关系,你就必须要和他有关系,和你有关系的只有父母,�子女,丈夫,妻子.而你的爷爷,或者大伯,舅舅是因为和你的父辈有关系才和你连接上的.所以你们一定有一条线连接起来,这样我只要知道,这条线的最高点,需要计算的这个人和我两直接的差距就可以了.线的最高点是什么意思了,举个例子: 爸爸的哥哥的儿子 最高点就是爸爸的哥哥也就是大伯, 爸爸的爸爸的儿子 最高点就是爸爸的爸爸也就是爷爷 也就是需要计算的那个辈分最高的人,而我们的差距就是你�是什么辈分 ,我把自己一辈定义为0代, 爸爸 , 妈妈,大伯,舅舅...定义为1代,爷爷2代,儿子,侄子,堂侄-1代... 爸爸的兄弟的儿子 最高点爸爸的哥哥就是大伯 ,他的儿子0代,和我同代,那肯定就是堂哥,堂弟了 爸爸的爸爸的儿子 最高点是爷爷 他的儿子辈分是1辈 就是你父辈,那就只要爸爸,叔叔,大伯. 只要定义两个变量,一个来记录当前人的辈分,出现父母就+1,儿女就-1,另外一个变量来记录最高点,结果就是根据最高点然后计算他的后辈就行了.需要注意的是,在计算前,需要对值先进行整合, 就是哥哥的哥哥 直接整合成哥哥 xxx的儿子的爸爸一定是xxx(xxx是男性)或者xxx的老公(xxx是女性)....,需要把所有的诱惑,或者这种不必要的给整合起来. 计算时,要注意除了你的配偶或者你的�直系亲属的兄弟姐妹和你有关系,其他人的配偶的兄弟姐妹和你都没关系 ,就像你大嫂的兄弟姐妹和你没有关系,需要做好这方面的判断. 还有爷爷的孙辈一定是你父亲的子辈和�父亲兄弟的子辈. 还需要注意出现最高点是爷爷,这个人和你同辈,但是可能是你爷爷的儿子后辈,也可能是你爷爷女儿的后辈.把这些处理好了,也就差不多了,
写的有点简单,只是个逻辑思考过程.就是一个思路而已.