Refactoring이란
함수 기능은 그대로 두고 구현하는 방식을 개선하는 것. 함수를 별도 파일로 저장해 모듈화 하고 import 하면 코드 중복을 줄여 효율적으로 작성 가능하다.
- 예시
refactoring 전 index.py 파일
#!/usr/local/bin/python3
print("content-type:text/html; charset=utf-8\n")
print()
import cgi, os
def getList():
files = os.listdir('data')
listStr = ''
for item in files:
listStr = listStr + '<li><a href="index.py?id={name}">{name}</a></li>'.format(name=item)
return listStr
form = cgi.FieldStorage()
if 'id' in form:
pageId = form['id'].value
description = open('data/'+pageId, 'r').read()
update_link = '<a href="update.py?id={}">update</a>'.format(pageId)
delete_action = '''
<form action="process_delete.py" method="post">
<input type="hidden" name="pageId" value="{}">
<input type="submit" value="delete">
</form>
'''.format(pageId)
else:
pageId = 'Welcome'
description = 'Hello, Web'
update_link = ''
delete_action = ''
print('''
<!doctype html>
<html>
<head>
<title></title>
<meta charset="utf-8">
</head>
<body>
<h1><a href="index.py" target="_blank">WEB</a>
</h1>
<ol>
{listStr}
</ol>
<a href="create.py">create</a>
{update_link}
{delete_action}
<h2>{title}</h2>
<p>{desc}</p>
</body>
</html>
'''.format(
title=pageId,
desc = description,
listStr=getList(),
update_link=update_link,
delete_action=delete_action))
getList()함수 부분을 view.py 라는 별도 파일로 분리
def getList():
files = os.listdir('data')
listStr = ''
for item in files:
listStr = listStr + '<li><a href="index.py?id={name}">{name}</a></li>'.format(name=item)
return listStr
refactoring 후 index.py 파일
import 모듈명
으로 불러오고 모듈명.함수명
으로 사용
#!/usr/local/bin/python3
print("content-type:text/html; charset=utf-8\n")
print()
import cgi, os, view
form = cgi.FieldStorage()
if 'id' in form:
pageId = form['id'].value
description = open('data/'+pageId, 'r').read()
update_link = '<a href="update.py?id={}">update</a>'.format(pageId)
delete_action = '''
<form action="process_delete.py" method="post">
<input type="hidden" name="pageId" value="{}">
<input type="submit" value="delete">
</form>
'''.format(pageId)
else:
pageId = 'Welcome'
description = 'Hello, Web'
update_link = ''
delete_action = ''
print('''
<!doctype html>
<html>
<head>
<title></title>
<meta charset="utf-8">
</head>
<body>
<h1><a href="index.py" target="_blank">WEB</a>
</h1>
<ol>
{listStr}
</ol>
<a href="create.py">create</a>
{update_link}
{delete_action}
<h2>{title}</h2>
<p>{desc}</p>
</body>
</html>
'''.format(
title=pageId,
desc = description,
listStr=view.getList(),
update_link=update_link,
delete_action=delete_action))