Skip to content

Instantly share code, notes, and snippets.

@holysugar
Created August 24, 2017 07:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save holysugar/b563824906e9157b17add50abfc4c8d1 to your computer and use it in GitHub Desktop.
Save holysugar/b563824906e9157b17add50abfc4c8d1 to your computer and use it in GitHub Desktop.
poeaa, 10-1, table data gateway

Table Data Gateway

多くの開発者はSQLをうまく書けるわけではないから、DBを簡単に操作するインタフェースを Table Data Gateway で用意する。

# ex.
# Items
#   id integer primary key
#   name varchar(255)
#   description text

class ItemGateway

  def initialize(driver)
    @driver = driver
  end


  def find(id)
    result = @driver.execute("SELECT ... FROM ... ", id)
    {
      id: result[0],
      name: result[1],
      description: result[2],
    }
  end

  def insert(name, description)
    @driver.execute("INSERT INTO ...", [name, description])
  end


  def update(id, name, description)
    @driver.execute("UPDATE ...", [id, name, description])
  end

end

値を返す場合の型が問題。一つの値だったり複数の列だったりする。

  • map . シンプルで良いがコンパイル時の検査が働かないためスペルミスなどでバグになりそう
  • Data Transfer Object (401p)
  • Record Set (508p)
  • Domain Model を使っている場合には適した domain object を使って返すのものよい
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment