Meteor에서 CoffeeScript 파일을 클래스 단위로 분할

4420 단어 MeteorCoffeeScript

CoffeeScript를 클래스 단위로 분할



Meteor는 전체 스택의 PaaS이며 클라이언트와 서버 모두 JavaScript를 사용할 수 있는 간편한 프로그래밍 환경입니다. 소규모의 앱이라도 이것 기능을 추가해 가는 동안에 코드량이 늘어나기 때문에 컴팩트하게 쓰기 위해서도 CoffeeScript 를 사용하고 싶은 것입니다. Coffee 사용한다면 클래스 단위로 파일 분할하여 전망을 좋아하고 싶습니다.

Meteor 에서는, 클라이언트와 서버의 코드보다 외측의 스코프에 클래스의 인스턴스를 생성하면(자) 파일을 넘어 참조할 수 있는 것 같습니다. 파일 결합하여 JavaScript로 컴파일하기 때문입니다.
이것을 이용해, 분할한 파일에 클래스 정의와 인스턴스화의 코드를 써 클래스의 초기 메소드를 메인 파일로부터 부르면 OK였습니다. 클래스 정의가 필요하지 않은 객체 등은 한 곳에 정리할 수도 있습니다.
덧붙여 「클래스 단위」라고 쓰고 있습니다만, 라이프 사이클의 짧은 클래스나 어떠한 클래스에 집약되는 클래스는, 팩토리나 집계 루트의 클래스 파일안에서 정의해, 그러한 팩토리나 집약 클래스내에서 생성하도록(듯이) 하면 메인의 클래스로부터는 은폐할 수 있고, 다른 클래스 파일로부터는 단순한 오브젝트 취급으로 할 수 있습니다.

Coffee Files

파일을 분할하면 메인 파일에서 클래스의 메서드를 호출해야합니다. Context 계열의 클래스라면

HogeContext.coffee
class HogeContext
  setUp: ->
    @status = new HogeStatus ({
          : # createContext
    })
      :

@hogeContext = new HogeContext

와 같이, 초기 구축에 어울리는 메소드 정의를 할 수 있고, 메인으로부터 불리는 것은 자연입니다만, 보통의 클래스는 조금 일부러 부르는 메소드를 정의하는 것이 미묘합니다. 하늘의 초기화 메소드에서도 만들어 불러 두면 좋을 것입니다.

Fuga.coffee
class Fuga
  initialize: ->
      : #nop

@fuga = new Fuga

메인의 파일로부터는, 각 클래스의 초기화 메소드를 적절한 순서로 호출합니다.

Main.coffee

if Meteor.isClient

  Meteor.startup ->
    HogeContext.setUp()
    Fuga.initialize()

if Meteor.isServer
  Meteor.startup ->
     :


파일 분할의 단점



파일 분할의 단점으로
  • Enum 정보는 한 곳에 없습니다.
  • Factory 클래스와 같이 static 하고 싶은 것도 인스턴스화할 필요가 있다.

  • 전자는 예를 들어
    TicketStatus =
      NEW      : 0
      ASSIGNED : 1
      CLOSED   : 2
    

    와 같이 정의해 Ticket 객체의 속성으로 설정하거나 해 사용합니다만, 여러가지 파일로부터 참조하고 싶은 경우는, 글로벌한 인스턴스로서 취급할 수 밖에 없습니다.

    후자는 예를 들어

    HogeFactory.coffee
    class HogeFactory
       @createHoge: ->
           :
         hoge
    
    hoge = HogeFactory.createHoge() 와 같이 사용할 수 없게 된다고 하는 것입니다만, Factory 의 인스턴스를 생성해 메소드의 정의로부터 @ 를 제외하는 것만이므로 그다지 유감이 아닙니다.
    음, 이것들은 전망이 나쁜 것에 비하면 사소한 문제라고 말할 수 있을 것입니다.

    좋은 웹페이지 즐겨찾기