我懂一些编程,我正在帮助我父亲写我的第一个真正的应用程序到他的商店。由于我是唯一的程序员,我必须决定程序的结构,我真的害怕用一些“设计选择”来打击自己。你知道吗
我面临的一个这样的问题是什么时候只对一堆方法使用类。让我给你举个真实的例子。我(将)有一组函数连接到mysql数据库并以不同的方式解析信息。我知道类是如何工作的,我读过关于它们的文章,并实现了一堆示例类。但是我不知道什么时候应该用它们而不是一堆函数。如果一些更有经验的程序员能分享一下这背后的思维过程,我将不胜感激。关于什么时候写一个类,什么时候不写,你有什么经验法则吗?你知道吗
作为一个附带问题,有多少评论是足够的?因为我从来没有写过任何“真正的”程序,所以我通常从不评论我的代码。现在我忍不住觉得我对它的评论太多了,因为我担心有一天我会迷失在自己的代码中。你知道吗
事先非常感谢。你知道吗
如果有人好奇的话,下面是我现在拥有的代码,尽管它与这个问题不是特别相关。你知道吗
# -*- coding: utf-8 -*-
import MySQLdb as mdb
import datetime as dt
try:
con = mdb.connect('localhost', 'root', '', 'database')
cur = con.cursor()
except mdb.Error:
print "Erro na conexao com o banco de dados!"
exit()
def getAverageDate(date, question):
""" Returns the average of ratings for a question in a given date
" Returns a Decimal object if the date exists in the
" database, otherwise, returns None
"""
query = ("SELECT AVG(idvalue) FROM value, submissions "
"WHERE value.answer = submissions.answer "
"AND submissions.question_id = %s "
"AND submissions.answer_date = %s")
try:
cur.execute(query, (question, date))
result = cur.fetchone()[0]
return result
except mdb.Error:
return mdb.Error;
def dateRange(initialDate, finalDate):
""" Generates all dates between a range of dates, finalDate non inclusive"""
for n in range(int ((finalDate - initialDate).days)):
yield initialDate + dt.timedelta(n)
def getAverageBetweenDates(initialDate, finalDate, question):
""" Returns a list containing two tuples with the average rating for
" a given date, and that date. If there are no ratings for a given
" date, it is not included in the list
"""
dates = []
values = []
for date in dateRange(initialDate, finalDate):
val = getAverageDate(date, question)
if val is not None:
dates.append(date.strftime("%x"))
values.append(getAverageDate(date, question))
return dates, values
好的,显然你现在只有一个模块,里面有几个连接不紧密的方法。你知道吗
很明显,在加载模块的过程中,您正在全局上下文中创建一个变量。对我来说,这是一个明显的迹象,表明您应该改用类,并将代码放在
__init__()
方法中:最重要的区别是:
mdb.connect()
如果执行import connector
操作,则不会发生etc,而是在第一次初始化类时发生。你知道吗计划为所有项目使用类是个好主意。从长远来看,它将创建一个更坚实的结构体,您将对代码有更好的总体把握。你必须考虑你的计划的每个主要方面,决定你希望他们如何相互作用,每个人将有什么主要的组成部分,预测未来的事件,并计划,总是计划,扩展。例如,所有用户函数(或方法)都将放在一个用户类中。你知道吗
<>这是C++,但是概念是真实的…对于显示的代码,可以创建一个
db
(数据库)类。您可以将返回的任何信息(没有传递给另一个类对象)存储在它的类变量中,并且您的所有函数都有一个很好的关联容器可供调用。1)阅读SOLID原则。首先,第一个原则就足够了——单一责任原则。通常你不会留下松散的,悬空的方法。经验法则是构建类,这些类有一个精确定义的职责。您可以定义一些实用函数(如果您需要它们,而Python还没有提供它们),但是您通常将它们组合在一个单独的模块中。你知道吗
2)评论多少就够了?这是一个简单的问题-没有任何评论就足够了。代码应该通过良好命名的类和函数来记录自己。很酷的报价:
更难的问题是-评论多少就太多了?当注释可以被更好的函数/类名和更好的代码分区所取代时,注释就太多了。你知道吗
注释作为解释代码的一种手段,实际上只是一种历史遗留机制,例如变量和函数需要简短的名称。现在你不必用“d”作为变量名,你可以称之为“invoiceDueDate”并方便地使用它。使用注释来记录公共图书馆的API是使用它们的唯一理由。你知道吗
相关问题 更多 >
编程相关推荐