【问题标题】:Design pattern for refactoring重构的设计模式
【发布时间】:2015-05-28 13:51:39
【问题描述】:

我有这三个函数,我觉得重复所有相同的代码很难看,这根本不是 DRY。 同时,我不确定如何重构这些函数以保持清晰的表达。 有什么推荐的吗?

谢谢

def download_loc(instance, filename):
    username = instance.username_or_anonymous()
    slug = instance.slug
    filename_with_timestamp = filename_timestamped(instance, filename)
    return "%s/%s/stl/%s" % (username, slug, filename_with_timestamp)

def preview_loc(instance, filename):
    username = instance.username_or_anonymous()
    slug = instance.slug
    filename_with_timestamp = filename_timestamped(instance, filename)
    return "%s/%s/preview/%s" % (username, slug, filename_with_timestamp)

def screenshot_loc(instance, filename):
    username = instance.username_or_anonymous()
    slug = instance.slug
    filename_with_timestamp = filename_timestamped(instance, filename)
    return "%s/%s/screenshot/%s" % (username, slug, filename_with_timestamp)

【问题讨论】:

  • 您将类型(stl、预览和屏幕截图)设为另一个参数并具有一个功能
  • 看相同的,看不同的,各自封装。

标签: python design-patterns refactoring


【解决方案1】:

引入第三个函数,它将类型名称作为参数。就我个人而言,我只会调用该函数,但如果它是从很多地方调用的,那么包装它是有价值的。

def loc(instance, filename, typename):
    username = instance.username_or_anonymous()
    slug = instance.slug
    filename_with_timestamp = filename_timestamped(instance, filename)
    return "{}/{}/{}/{}".format(username, slug, typename, filename_with_timestamp)

def download_loc(instance, filename):
    return loc(instance, filename, "stl")

def preview_loc(instance, filename):
    return loc(instance, filename, "preview")

def screenshot_loc(instance, filename):
    return loc(instance, filename, "screenshot")

【讨论】:

  • 请注意,% 运算符已弃用,取而代之的是 str.format
猜你喜欢
  • 1970-01-01
  • 2011-03-25
  • 2010-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多