84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
我现在会用的方法:
抛砖引玉一下,希望引出除了技巧上还有经验上的知识。
光阴似箭催人老,日月如移越少年。
怎么说呢,如果老是觉得碰到循环引用,很可能是模块的分界线划错地方了。可能是把应该在一起的东西硬拆开了,可能是某些职责放错地方了,可能是应该抽象的东西没抽象
总之微观代码规范可能并不能帮到太多,重要的是更宏观的划分模块的经验技巧,推荐uml,脑图,白板等等图形化的工具先梳理清楚整个系统的总体结构和职责分工
这是代码结构设计的问题,模块依赖和类依赖一样,想清楚了,就没问题了。
补充一点,某些时候实在绕不开循环引用了(旧代码维护,补救,。。。),可以学习django.db.models.ForeignKey的做法。
ForeignKey用于定义一个model到另外一个model的多对一关系, 它的第一个参数可以是一个model类或者model name字符串例如
class Country(models.Model): pass class Car(models.Model): manufacturer = models.ForeignKey('Manufacturer') # country = models.ForeignKey(Country) 直接以Country作为参数进行关联 class Manufacturer(models.Model): # ... pass
同时接受model类型和字符串类型的考虑就是说,你可以在定义Manufacturer之前就先在Car中声明这个ForeignKey关系,在实际使用到的时候再通过model name去load对应的model。这个方法同时也避免了两个model定义在不同的文件中的循环引用的问题
怎么说呢,如果老是觉得碰到循环引用,很可能是模块的分界线划错地方了。可能是把应该在一起的东西硬拆开了,可能是某些职责放错地方了,可能是应该抽象的东西没抽象
总之微观代码规范可能并不能帮到太多,重要的是更宏观的划分模块的经验技巧,推荐uml,脑图,白板等等图形化的工具先梳理清楚整个系统的总体结构和职责分工
这是代码结构设计的问题,模块依赖和类依赖一样,想清楚了,就没问题了。
补充一点,某些时候实在绕不开循环引用了(旧代码维护,补救,。。。),可以学习django.db.models.ForeignKey的做法。
ForeignKey用于定义一个model到另外一个model的多对一关系, 它的第一个参数可以是一个model类或者model name字符串
例如
同时接受model类型和字符串类型的考虑就是说,你可以在定义Manufacturer之前就先在Car中声明这个ForeignKey关系,在实际使用到的时候再通过model name去load对应的model。
这个方法同时也避免了两个model定义在不同的文件中的循环引用的问题