所以我已经完成了我的OO分析和我正在构建的Web应用程序的设计,现在我正在实施.已经做出设计决策来使用Python和Web开发框架Django来实现系统.
我想开始实现一些需要持久性的域实体类.似乎Django会让我实现这些作为继承自Django模型类的类,以便使用Django ORM进行持久化.但是,这似乎是我的类实体和持久性机制之间过于强烈的耦合.如果在某个阶段我想抛弃Django并使用另一个Web开发框架,或者只是放弃Django的ORM替代方案,会发生什么?现在我必须从头开始重新编写我的域实体类.
因此,最好将我的域类实现为独立的Python类,将所有业务逻辑封装在这些类中,然后使用某种机制(设计模式,如bridge或adapter或???)将这些域类的持久存储委托给Django ORM,例如通过适当设置的Django模型类.
有没有人建议如何做到这一点?从我读过的所有内容看来,人们只是将它们的域类实现为从Django模型类继承的类,并在这个类中混合了业务逻辑.这对于下线更改,维护,可重用性等似乎不太好.
说你有:
def my_func():
fh = open(...)
try:
print fh.read()
finally:
fh.close()
Run Code Online (Sandbox Code Playgroud)
我的第一个问题是:是否值得使用try/finally(或with)语句?当函数终止时(通过垃圾收集),文件是否仍然关闭?
我在阅读了Martelli的"蟒蛇食谱"中的食谱之后看到了这一点
all_the_text = open('thefile.txt').read()
Run Code Online (Sandbox Code Playgroud)
附带注释:"当你这样做时,一旦读取操作完成,你就不再有文件对象的引用.实际上,Python会立即注意到缺少引用,并立即关闭文件."
我的功能示例几乎相同.你有一个参考,只是参考的寿命很短.
我的第二个问题是:马尔泰利的陈述中"立即"是什么意思?即使您根本没有引用,但是文件关闭是否仍然发生在垃圾收集时间?
正如标题所示,我想获得一个提供某个虚拟包的所有包的列表.这样做的一种方法是编写一个解析所有输出的shell脚本
apt-cache search -f .*
Run Code Online (Sandbox Code Playgroud)
并输出在提供部分中具有虚拟包的所有包.这种方法的问题在于需要花费大量的时间来执行.我想应该有一个简单的命令,以有效的方式做到这一点,但我无法找到.