CRUD + L 예제
CRUDL은 전통적인 데이터 처리 기능인 Create, Read, Update, Delete에 List를 추가한 개념입니다. 이는 데이터베이스와 상호작용을 단순화하고 효율적으로 관리하는 데 유용합니다. BindModel은 데이터베이스와의 상호작용을 위한 유용한 도구로, CRUDL 관점의 설계를 지향합니다.
등록 (Create)
Create는 데이터베이스에 새로운 레코드를 삽입하는 작업을 의미하며, REST API에서는 POST 요청에 해당합니다.
var bm = new BindModel();
// url 설정 및 command 생성
bm.url = '/user'
bm.addCommand('create');
// 컬럼 추가
bm.addColumn('user_name', 'create', ['valid', 'bind']);
bm.addColumn('tel', 'create', 'bind');
// 실행
bm.command['create'].execute();
bm.command['create'].valid.columns
: 유효성 검사 대상의 컬럼들- “user_name” 컬럼의 유효성 검사를 합니다.
bm.command['create'].bind.columns
: HTTP 전송 대상의 컬럼들- “user_name, tel” 컬럼값은
/user
로 전송합니다.
- “user_name, tel” 컬럼값은
- POST 요청을 전송할 경우,
bm.baseConfig.method = 'post'
를 설정합니다.
읽기 (Read)
Read는 데이터베이스에서 특정 레코드를 조회하는 작업을 의미하며, REST API에서는 GET 요청에 해당합니다.
var bm = new BindModel();
// Create command
bm.addCommand('read', 3);
// Add Column
bm.addColumn('idx','read', ['valid', 'bind']);
bm.addColumn('tel','read', 'output');
// Setting and executing commands
bm.command['read'].url = '/user/1'
bm.command['read'].execute();
bm.command['read'].valid.columns
: 유효성 검사 대상의 컬럼들- “idx” 컬럼의 유효성 검사를 합니다.
bm.command['read'].bind.columns
: HTTP 전송 대상의 컬럼들- “idx” 컬럼값은
/user
로 전송합니다.
- “idx” 컬럼값은
bm.command['read'].output.columns
: HTTP 응답에서 받아올 컬럼들- “tel” 컬럼값은
/user
로 전송합니다.
- “tel” 컬럼값은
- RESTful 요청의 URL 수정은 cbBegin 콜백에서 설정할 수 있습니다.
수정 (Update)
Update는 데이터베이스의 기존 레코드를 수정하는 작업을 의미하며, REST API에서는 PUT 또는 PATCH 요청에 해당합니다.
var bm = new BindModel();
// url 설정 및 command 생성
bm.url = '/user'
bm.addCommand('update');
// Add Column
bm.addColumn ('idx', 'update', ['valid', 'bind']); // Check Required Values
bm.addColumn('tel', 'update', 'bind');
// Execute
bm.command['update'].execute();
bm.command['update'].valid.columns
: 유효성 검사 대상의 컬럼들- “idx” 컬럼의 유효성 검사를 합니다.
bm.command['update'].bind.columns
: HTTP 전송 대상의 컬럼들- “idx, tel” 컬럼값은
/user
로 전송합니다.
- “idx, tel” 컬럼값은
- PATCH 요청을 전송할 경우,
bm.baseConfig.method = 'patch'
를 설정합니다.
삭제 (Delete)
Delete는 데이터베이스의 특정 레코드를 삭제하는 작업을 의미하며, REST API에서는 DELETE 요청에 해당합니다.
var bm = new BindModel();
// url 설정 및 command 생성
bm.url = '/user';
bm.addCommand('delete');
// Add Column
bm.addColumn ('idx', 'delete', ['valid', 'bind']); // Required value check
// Execute
bm.command['update'].execute();
bm.command['update'].valid.columns
: 유효성 검사 대상의 컬럼들- “idx” 컬럼의 유효성 검사를 합니다.
bm.command['update'].bind.columns
: HTTP 전송 대상의 컬럼들- “idx” 컬럼값은
/user
로 전송합니다.
- “idx” 컬럼값은
- DELETE 요청을 전송할 경우,
bm.baseConfig.method = 'delete'
를 설정합니다.
조회 (List)
List는 데이터베이스에서 여러 레코드를 조회하는 작업을 의미하며, REST API에서는 GET 또는 POST 요청에 해당합니다.
{
"rows": [
{ "u_name": "Hong Gildong", "gender", "M" },
{ "u_name": "Sungchunhyang", "gender", "W" },
]
}
var bm = new BindModel();
// url 설정 및 command 생성
bm.url = '/user/list'
bm.addCommand('list', 2);
// 컬럼 추가
bm.addColumn('user_name', 'list', 'output');
bm.addColumn('gender', 'list', 'output');
// 출력 콜백 설정
bm.command['list'].cbOutput = function(views){
for(var i = 0; i < views[0].rows.count; i++) {
var row = views['first'].rows[i];
console.log(i, row['user_name'], row['gender']);
// 0 Hong Gil-dong M
// 1. Sung Chunhyang W
}
}
// Execute
bm.command['list'].execute();
bm.command['update'].valid.columns
: 유효성 검사 대상의 컬럼들- “idx” 컬럼의 유효성 검사를 합니다.
bm.command['update'].bind.columns
: HTTP 전송 대상의 컬럼들- “idx” 컬럼값은
/user
로 전송합니다.
- “idx” 컬럼값은
- cbOutput 콜백에서 화면 출력 관련 작업을 작성합니다.
이와 같이 CRUDL은 전통적인 CRUD 기능에 조회(List)를 추가하여 보다 유연하고 강력한 데이터 조작 기능을 제공합니다. BindModel을 사용하면 이러한 CRUDL 작업을 간편하게 수행할 수 있습니다.
등록 / 읽기 / 수정 / 삭제 / 조회 예제
다음은 Create, Read, Update, Delete, List 전체 예제를 포함한 예제입니다.
서버 데이터
{
"rows": [
{ "u_name": "Neo", "gender": "M" },
{ "u_name": "Seri", "gender": "W" },
]
}
컬럼을 command 에서 공유되어서 컬럼을 등록 후 설정하는 방식을 선택했습니다.
예제 : 메소드 호출 방식
var bm = new BindModel();
// setting url
bm.url = '/user'
// command registration
bm.addCommand('create');
bm.addCommand('read', 3);
bm.addCommand('update');
bm.addCommand('delete');
bm.addCommand('list', 2);
// Register a column
bm.addColumn('user_name');
bm.addColumn('tel');
bm.addColumn('idx');
bm.addColumn('gender');
// create command setting
bm.command['create'].seColumn('user_name', ['valid', 'bind']);
bm.command['create'].seColumn('tel', 'bind');
// read command setting
bm.command['read'].seColumn('idx', ['valid', 'bind']);
bm.command['read'].seColumn('tel', 'output');
bm.command['read'].url = '/user/1';
// update command setting
bm.command['update'].seColumn('idx', ['valid', 'bind']);
bm.command['update'].seColumn('tel', 'bind');
// delete command setting
bm.command['delete'].seColumn('idx', ['valid', 'bind']);
// list command setting
bm.command['list'].seColumn('user_name', 'output');
bm.command['list'].seColumn('gender', 'output');
bm.command['list'].url = '/user/list';
bm.command['list'].cbOutput = function(views){
for(var i = 0; i < views[0].rows.count; i++) {
var row = views['first'].rows[i];
console.log(i, row['user_name'], row['gender']);
// 0 Hong Gil-dong M
// 1. Sung Chunhyang W
}
};
// Execute
bm.command['create'].execute();
bm.command['read'].execute();
bm.command['update'].execute();
bm.command['delete'].execute();
bm.command['list'].execute();
예제 : 서비스객체 주입 방식
var bm = new BindModel({
url: '/user',
items: {
user_name: '',
tel: '',
idx: '',
gender: '',
},
command: {
create: {},
read: {
outputOption: 3,
url: '/user/1'
},
update: {},
delete: {},
list: {
outputOption: 2,
url: '/user/list',
cbOutput = function(views){
for(var i = 0; i < views[0].rows.count; i++) {
var row = views['first'].rows[i];
console.log(i, row['user_name'], row['gender']);
// 0 Hong Gil-dong M
// 1. Sung Chunhyang W
}
}
},
},
mapping: {
user_name: {
create: ['valid', 'bind'],
list: 'output'
},
tel: {
create: 'bind',
read: 'bind',
update: 'bind'
},
idx: {
read: ['valid', 'bind'],
update: ['valid', 'bind'],
delete: ['valid', 'bind'] },
},
gender: {
list: 'output'
}
}
});
// Execute
bm.command['create'].execute();
bm.command['read'].execute();
bm.command['update'].execute();
bm.command['delete'].execute();
bm.command['list'].execute();
이 두 가지 예제는 CRUDL 작업을 효율적으로 수행하기 위한 방법을 보여줍니다. 메소드 호출 방식과 서비스 객체 주입 방식을 사용하여 각 명령어를 설정하고 실행하는 방법을 설명하고 있습니다.