【问题标题】:Rewrite a procedural script in clean OOP Python style以干净的 OOP Python 风格重写程序脚本
【发布时间】:2012-04-18 07:00:46
【问题描述】:

我已经成功编写了一个 Powershell 脚本:

  • 查询AD获取计算机列表
  • 通过 WMI 查询每台计算机以获取软件/硬件信息
  • 将收集的数据插入 MySQL 数据库。

脚本运行良好,但我不喜欢它的实现方式。这是程序性的,并且有很多代码重复,每次我需要更改某些内容时都会造成混乱。

现在,我想问你的是:在 python 中使用 OOP 实现它的最简洁的方法是什么?我想到了类似的东西(伪代码):

Class ADquery
    function get_computers( UO ): return a list of computers in the specified UO

Class Computer
    constructor( computername )
    function query(): connect to the computer and pull the info through WMI
    function print(): print the collected info to the console (debug)
    property RAM
    property CPU
    ...

问题:

  1. 为了将收集的数据保存到数据库中,我是否必须创建另一个对象(例如数据库)并将计算机对象传递给他或向计算机类添加成员函数(例如 save_db() ) ?

  2. 如果我选择第二个选项,当我处理多个对象时不会导致大量 MySQL 连接?

非常感谢,抱歉我的英语不好

【问题讨论】:

  • codereview.stackexchange.com 上发布您的完整脚本(或其关键部分)并请人们改进它可能会更有用。
  • 感谢@thg435,但我还没有写一行新脚本

标签: python coding-style wmi implementation


【解决方案1】:

我觉得这种架构很合理。

  1. 你也可以这样做,我不确定它是否真的会对像这样的小应用程序产生巨大的影响。

  2. 可能。根据它的实现方式,您可以获得很多连接。如果您要进行合理数量的插入,我会将它们粘贴在一个列表中并一次全部插入,如果您的代码可以这样做的话。

【讨论】:

    【解决方案2】:

    您还可以从互联网或当地书店购买一本面向对象设计的书籍,例如Rumbaugh et al.。我还建议阅读设计模式,例如Gamma et. al.的书。我目前正在这样做,了解如何解决特定问题的标准模式对塑造您对面向对象编程的思维过程非常有帮助。

    ps 你的英语一点也不差(请注意,我也不是母语人士;))。

    【讨论】:

    • +1。好点子。我会推荐给任何新的或正在学习的开发者!
    • 谢谢 Paul,我刚刚订购了 Design Patterns :)
    • 对你有好处!我真的很喜欢这本书
    猜你喜欢
    • 2023-03-09
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    相关资源
    最近更新 更多