Руководство по проектированию Python:

Я очень опытный разработчик - сделал много тяжелых работ с Delphi, C # и C ++. Я всегда придерживался очень близко к руководящим принципам для структурированного программирования, OOP, свободно связанных модульных конструкций и т. Д. - и поскольку все языки, которые я использовал встроенным способам обеспечения применения этих концепций - контроль доступа, статические типы, интерфейс и абстрактный класс Поддержка и т. Д. - Я полагаюсь на них, чтобы структурировать мой код.

Теперь я рисул с Python в течение нескольких месяцев. Я впечатлен его множеством замечательных особенностей - но я очень скучаю по встроенным ограничениям, которые позволяют легко поддерживать модуляризованный код и организован. И, к сожалению, я вижу очень много «Кодекс спагетти», написанного в Python, даже из очень респектабельных источников. Я не буду никому не замужелю, но у меня есть несколько книг, написанных главными лигами Pythonistas с примерами, которые изобилуют проектами (лучше поставлены - «анти-дизайна»), которые заставляют меня содрогнуть. Мне кажется, что, потому что Python настолько прост в использовании, также очень легко злоупотребления .

Я пытаюсь дисциплинировать сам, когда я код в Python, но я считаю, что требуется много дополнительной работы, и часто я должен настроить и придерживаться ограничений, просто на основе моей собственной памяти о дизайне без помощи с языка вообще. А поскольку не существует проверки времени компиляции, это вдвойне сложно - часто вы не обнаружите недостаток дизайна, пока вы фактически не забегаете этот сегмент кода.

Итак, Я ищу очень конкретную информацию: Некоторые примеры или лучше по-прежнему A Книгу из хорошо структурированных дизайнов Python и технологии дизайна - Как наилучшим образом реализовать инкапсуляцию, косвенность, Очень слабо связанные дизайн и т. Д.

Плохой дизайн ИМО из выдающегося автор книги Python - (с запутанностью)

def populateList(self, selecteddisk=None):
selected = None ***#Bundling - coupling:*** 
self.listWidget.clear()
for disk in self.disks.inOrder():
item = QListWidgetItem(QString("%1 of %2/%3 (%L4)") \
.arg(disk.name).arg(disk.owner).arg(disk.country) \
.arg(disk.teu))
self.listWidget.addItem(item)
***#Bundling - coupling:*** 
if selecteddisk is not None and selecteddisk == id(disk):
    selected = item
    if selected is not None:
    selected.setSelected(True)
    self.listWidget.setCurrentItem(selected)
5
задан Vector 16 September 2011 в 03:06
поделиться