Perl日記

日々の知ったことのメモなどです。Perlは最近やってないです。

マスタデータを取り扱う

DBに入れるまでもないマスタデータをアプリケーションで取り扱うときの最近やってること。
DBに入れないからといって、設定ファイルには相応しくないデータ。


ハッシュで入れるだけだと、たとえばそのデータでセレクトボックスを作るときに取り出し順が保証されないので、
配列→ハッシュで作る。


イメージとしては、以下のような感じ。

Myapp/Master.pm
package Myapp::Master;
use strict;
use warnings;

# 一括取得サブルーチン
sub all {
	my ($class) = @_;
	{
		no strict 'refs';
		return @{ &{"$class\::DATA"}() };
	}
}
# 名称取得サブルーチン
sub name {
	my ($class, $id) = @_;
	for my $data ($class->all) {
		if ($data->{id} eq $id) {
			return $data->{name};
		}
	}
}

1;
Myapp/Master/Dept.pm
# 部門マスタデータ
package Myapp::Master::Dept;
use parent 'Myapp::Master';
use utf8;

sub DATA {
	[
		{ id => 1, name => '総務部' },
		{ id => 2, name => '経理部' },
		{ id => 3, name => '人事部' },
		{ id => 4, name => '営業部' },
		{ id => 5, name => '監査部' },
	];
}
1;
Myapp/C/Root.pm
use Myapp::Master::Dept;
# ユーザ情報画面
sub user_info {
  my ($class, $c) = @_;
  my $user = $c->db->single('users', { id => 'xxxxxx' });

  return $c->render('user_info.tt', {
    user => $user,
    # このひとの部門名
    user_dept_name => Myapp::Master::Dept->name($user->dept_id),
  });
}
# ユーザ登録画面
sub user_add {
  my ($class, $c) = @_;
  return $c->render('user_add.tt', {
    # 部門セレクトボックス用
    dept => Myapp::Master::Dept->all,
  });
}