我知道一些编程,我正在帮助我父亲,将我的第一个真正的应用程序写到他的商店。因为我是唯一的程序员,所以我必须决定程序的结构,我真的很害怕用一些“设计选择”来打自己的脚。
我面临的一个这样的问题是何时对一堆方法使用类。让我给你一个真实的例子。我(将)有一堆连接到 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