본문 바로가기

소프트웨어-이야기/프로그래밍 언어와 프레임워크

레일즈에 Service/Decorator Layer 적용하기 (5) - Form Object에서 유효성 체크하기 이 위키는 Build Sleek Rails Components With Plain Old Ruby Objects을 정리한 글입니다 :) 저자는 모델 객체에서는 association과 constant만 관리되는게 더 로직을 깔끔하게 만든다고 이야기했었습니다. 그래서 유효성 체크와 callback 로직은 model에서 다루지 않아야한다고 했죠. 그래서 이번 챕터에서는 model 객체에 있던 유효성 로직을 지우고, 대신에 form object를 사용하도록 하는 방법을 설명하고자 합니다. Form Object란?Form Object는 Plain Old Ruby Object입니다. 그리고 이건 데이터베이스를 호출해야할 때, controller와 service Object에서 사용되는 객체입니다. Form Obje..
레일즈에 Service/Decorator Layer 적용하기 (4) - Service Object 이 포스팅은
레일즈에 Service/Decorator Layer 적용하기 (3) - Service Object 이 포스팅은 이 길어져서, 두번째 글을 정리해보고자 합니다.Service Object는 비즈니스 로직의 일부를 옮긴 클래스입니다. Skiny Controller Fat Model 스타일에서는, 한 객체에 여러 비즈니스 로직이 포함되게 됩니다. 반면, Service Object를 사용하면 여러 클래스가 생성되고, 각 클래스는 하나의 목적을 위해 존재하게 됩니다. 왜 Service Object를 사용해야할까요? 1. 디커플링서비스 객체를 사용하면 객체 간에 독립성을 유지하는 데에 도움이 됩니다. 2. 가독성이름이 잘 지어진 서비스 객체를 사용하면 어플리케이션이 무슨 일을 하는 건지 찾기 쉽습니다. 서비스 디렉토리만 보면, 이 애플리케이션이 어떤 역할을 하는지 쉽게 알아차릴 수 있습니다. 3. 모델과 컨트롤러..
레일즈에 Service/Decorator Layer 적용하기 (2) - Value Object 이 포스팅은 이 길어져서, 두번째 글을 정리해보고자 합니다. Service Layer를 사용하는 개발 가이드라인이 글을 쓴 저자는 Service / Decorator Layer를 사용해서 개발을 할 때, 아래의 가이드라인을 따른다고 합니다. 1. ActiveRecord 모델은 association과 constant만 갖고 있어야합니다. 그 외에는 아무것도 하지 않아야합니다.model에서는 서비스 객체를 사용하지 않아야하고, 유효성 체크는 ActiveModel Form object를 사용해서 해결해야합니다. 2. 컨트롤러는 Service Object만 호출해야합니다. 컨트롤러의 코드는 짧게 구성되어야합니다. 서비스 객체 호출 외에, 컨트롤러에서 해야하는 기능들은 아래와 같습니다. -> HTTP 라우팅, 파..
레일즈에 Service/Decorator Layer 적용하기(1) - MVC 패턴 이 포스팅은 Build Sleek Rails Components With Plain Old Ruby Objects을 정리한 글입니다 :) 시작루비온레일즈는 사용자를 필요로하는 서비스를 빠르게 앱을 만들고, 검증할 수 있다는 장점이 있습니다.그러나 시스템 규모가 커지면 코드는 점점 거대해지고, 복잡해지게 됩니다. 그러다보면 모델이 너무 뚱뚱해져서, MVC에서 말하는 "fat model, skinny controller" 패턴을 버리고 싶어지기도 합니다.그러나 루비온레일즈를 계속 사용해야하는 경우 어떻게 해야할까요? 이 문제에 대한 답으로 OOP 개념을 사용해서, 코드의 커플링을 줄여주고, 가독성있게 변경하는 방법에 대해서 설명하고자 합니다. 어떤 경우에 Service / Decorator Layer를 사용..
(번역)Command 아키텍처 기반으로 루비온 레일즈의 Controller Action 리팩토링하기 REFACTORING CONTROLLER ACTION IN RUBY ON RAILS 레일즈 컨트롤러가 뚱뚱해지는 현상을 꽤 많이 봤었다. Medium 눈팅하다가, 레일즈 컨트롤러를 리팩토링했다는 글을 발견했다. 뭔 내용인지 궁금해서 ㅋㅋ 읽어본 내용을 정리해보고자 한다. 컨트롤러는 얄쌍하고, 모델은 뚱뚱하게 로직을 짜는게 루비온레일즈의 MVC 기본 원칙이다. 그러나 시간이 흐르다 보면, 프로젝트는 점점더 커지고 메서드도 늘어난다. 그러다 보니 코드를 찾거나 신규 피쳐를 추가하는게 어려워진다. 그러다 결국 컨트롤러는 더이상 얄쌍해지지 않게 되고, 복잡해진다. 이에 대한 해결 방법을 정리하고자 한다. Controllers 우리는 컨트롤러에 코드가 몇백줄이나 되는걸 원하진 않는다. 그래서 가장 좋은 방법은 다..
(읽을거리)루비온레일즈 개발자를 위한 DDD 읽을 거리medium 포스팅Ruby on rails DDD => 읽어보니 루비에서는 어떤 느낌으로 DDD를 쓰는지 감이 온다 공식적인 느낌이 드는 ddd-ruby 사이트ddd-ruby.github.io레일즈 앱에서 비즈니스 도메인을 어떻게 관리할 건지 토론하는 페이지 Struggling with complex Rails app and business domain?2012년도에 작성된 sitepoint 포스팅 시리즈 DDD for Rails Developers. Part 1: Layered ArchitectureDDD for Rails Developers. Part 2: Entities and ValuesDDD for Rails Developers. Part 3: Aggregates스크립트 언어의 DDD ..
[Ruby]루비의 메모리 이슈 루비 메모리 이슈 관련 포스팅 해석 및 따라해보기 블로그 : https://www.toptal.com/ruby/hunting-ruby-memory-issues예제 코드 : https://github.com/lingceng/momery_demo 준비물1. 예제 코드를 다운 받는다 2. Gemfile을 만들어서, 테스트용 스크립트를 돌릴 때 필요한 gem들을 설치한다 예제 코드에서는 Gemfile이 따로 없어서, 나는 아래의 Gemfile을 따로 만들어서 예제 코드를 돌려봤다.이 예제 코드 안에 아래의 Gemfile을 만들고, bundle install을 해주면, Gem들이 설치된다.source 'http://rubygems.org' gem "activerecord" gem "activesupport" ge..