iT邦幫忙

2021 iThome 鐵人賽

DAY 23
0
自我挑戰組

冒險村-30 Day Ruby on Rails Tips Challenge系列 第 23

冒險村23 - Design Pattern(3) - Builder

23 - Design Pattern(3) - Builder

Builder pattern 常常也被叫做 adapter,主要目的是提供一種根據情況 return,給 class 或 instance 的簡單方法,通常被拿來解析文件的內容,可以依照以下的方式來建立一個 builder:

Create app/parsers folder

  • base_parser.rb
  • file_parser.rb
  • csv_file_parser.rb
  • xls_file_parser.rb

Add app > parsers > base_parser.rb

  # frozen_string_literal: true
  class BaseParser
    def initialize(file_path)
      @file_path = file_path
    end
  end

Add app > parsers > file_parser.rb

  # frozen_string_literal: true
  class FileParser
    def self.build(file_path)
      case File.extname(file_path)
        when ".csv" then CsvFileParser.new(file_path)
        when ".xls" then XlsFileParser.new(file_path)
        else
          raise(UnknownFileFormat)
        end
    end
  end

註: extname - https://apidock.com/ruby/File/extname/class

Add app > parsers > csv_file_parser.rb

  class CsvFileParser < BaseParser
    def rows
      # parse rows
    end
  end

Add app > parsers > xls_file_parser.rb

  class XlsFileParser < BaseParser
    def rows
      # parse rows
    end
  end

再來,只需要 build 後,就可以取得 parser 底下的 rows,再根據要取得的資料做對應的 code 即可。

  parser = FileParser.build(file_path)
  rows = parser.rows

參考資料

My blog


上一篇
冒險村22 - Design Pattern(2) - Presenter
下一篇
冒險村24 - Design Pattern(4) - Calculator
系列文
冒險村-30 Day Ruby on Rails Tips Challenge30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言