모델하우스

  • 본 패키지는 Flutter 와 Firebase 를 통해서 앱을 빠르게 개발할 수 있도록 도와주는 UI 디자인과 사용자, 게시판, 채팅, 푸시 알림, 소셜 기능을 모두 포함하는 라이브러리 패키지이다.
  • 궁극적인 목적은 ModelHouse 패키지 하나만 사용하면 앱이 만들어지고 배포할 수 있도록 하는 것이다.
  • 물론 디자인 변경, 로직 변경, 기능 추가 등의 커스터마이징도 쉽게 할 수 있다.
  • 본 패키지의 라이센스는 MIT 이며, 누구든지 어떤 목적으로든 사용 할 수 있다.

개요

가칭: 모델하우스. 정식 명칭은 차차 변경.

참여 방법

가장 먼저 협업하는 방법에 대해서 배워한다. 협업을 하기 위해서는

  • Git 을 알아야하고, Dart 스타일 가이드,
  • Flutter 스타일 가이드을 잘 알고 있어야 한다.
  • 또한 필수적으로 문서화를 잘 해야 한다. 문서화는 소스 코드에 하고 Markdown 파일에 해야 한다.
  • 소스 코드 포멧의 통일을 위해서 편집기는 VSCode 만 사용한다. VSCode 를 사용해서, 각종 설정 까지 공유를 한다.
  • 모델하우스 코드 컨벤션을 통해서 통일성있는 코드를 작성해 나간다.

Git

팀 작업을 위한 Git 명령어 사용법을 꼭 익혀야 한다.

예를 들면 fork 후 pr 을 하고, origin 에서 업데이트 된 내용을 local 로 받아오는 등의 작업이 필요합니다.

문서화

패키지로 만들어 공개하고 많은 개발자들이 이용하기를 바란다면 문서화를 잘 해 놓는 것이 가장 중요하겠다. 같은 맛이면 보기 좋은 떡이 점수가 더 높은 법이다.

그래서 가장 먼저 해야 할 것이 문서화를 어떻게 하는 것이다.

소스 코드 내에 문서화를 하는 방법과 Markdown 에 문서화를 하는 두가지 방법을 배워야 한다.

소스 코드 업데이트 방법: fork 와 pr

fork 후 pr 하시면 됩니다. 라고 짧게 끝내면 어떻게 해야할지 모르겠죠? 그래서 아래에 자세히 설명을 해 놓았다.

  • 프로젝트 홈페이지: https://github.com/thruthesky/model_house 로 접한다.
  • fork 한다.
  • fork 한 것을 clone 한다.
  • 자신 만의 branch 를 만든다.
  • branch 에서 작업하고 push 한다.
  • pr 한다.
  • pr 이 완료되기 까지 기다린다 또는 핵심 개발자에게 요청한다.

업데이트가 있을 때마다 origin 에서 다운받는다.

코드 리뷰

코드 리뷰를 받지 못했으면, 핵심개발자에게 물어본다.

모델하우스 코드 컨벤션 - 개발 가이드

코드 컨벤션이란 일종의 코딩 스타일을 말하는데, 많은 개발자들이 협업할 때, 통일된 방식의 코드를 작성하여 가독성을 높이고자 하는데에 있다. 한 마디로 규칙에 맞게 코드를 작성하라는 것이다. 그리고 그 규칙이란 가장 표준스러운 규칙이어야 할 것이다.

규칙 1. 코드는 무조건 짧아야 한다.

  • 코드는 무조건 짧아야 한다. 그래야 단순하다. 단순해야 읽기 쉽다.
  • 긴 코드는 무조건 삭제되어야 한다. 코드가 길거나 복잡하면 코드 리뷰 reject 될 가능성이 매우 높다.

규칙 2. 플러터스러움

  • Dart & Flutter 코딩 스타일 가이드를 따르며,
  • Flutter 컨벤션을 따른다. 예를 들면, 많은 라이브러디르에서 Xyz.instance 와 같이 Singleton 사용 방식을 그대로 따라 한다. 또 다른 예로 ListView.builder 와 같이 named contructor 를 많이 사용하는데, 그러한 방식을 그대로 따라서 한다. 모델링, 상태관리, 이벤트 등 많은 부분에서 가장 플러터스러운 코드를 작성하도록 한다.
  • 당연하겠지만 dart style guide 와 flutter style guide 를 따라서 작업을 해야 한다. 그래야 개발자들 끼리 소스 코드를 바탕으로 쉽게 소통 할 수 있는 것이다.

상태관리

  • Firebase 를 쓰면서 상태 관리를 따로 하는 것은 낭비이다.
  • 만약, 상태 관리가 조금이라도 필요하다면 직접 상태관리자를 만들어 쓴다.

모델

  • 모델은 각 데이터의 분류에 따라 만들어 진다. 예를 들면 사용자는 User, 게시판 카테고리는 Category, 게시글은 Post, 코멘트는 Comment, Chat, ChatRoom, ChatMessage, Report 등등으로 나뉜다.
  • 모델은 각 데이터를 serialize/deserialize 하는 것 뿐만이나, 기본적인 CRUD 및 동작 기능을 가지고 있다.
    • 즉, 해당 Entity 의 데이터 관리 뿐만아니라 MVC 모델에서 Model 이 하는 business logic 까지 포함된다. 단, 이 business logic 은 해당 Entity 에 대한 것으로 제한을 한다. 예를 들면,
      • user.like(), post.like(), comment.like() 와 같은 공통되고 통일성이 있는 로직 부터, User.create(), user.update(), user.resign(), user.follow(), user.block() 등 해당 Entity 의 다양한 로직을 가지고 있다.

서비스

  • 서비스는 모델에서 제공하지 않는 기능을 담는다.
  • 서비스는 FirebaseAuth.instance 와 같은 방식의 Singleton 으로 사용하며
  • 예를 들어, 사용자의 아바타를 터치(클릭)했을 때, 사용자의 프로필을 화면에 띄워야 한다. 그런데 사용자의 아바타는 글, 코멘트, 채팅 뿐만아니라 앱의 구조에서 깊숙한 곳에서 다양한 방식으로 표시될 수 있다. 또한 본 패키지를 사용하는 개발자가 임의의 위치에 아바타를 표시 할 수 있다. 이 때 사용자의 프로필을 화면에 띄우는 로직을 매번 코딩해야한다면 번거롭기도 하며 실수로 에러가 날 수 있고, 또 해당 로직이 변경되면, 모든 아바타를 쓰는 곳에 일일히 변경을 해 주어야 한다. 그래서 사용자 프로필을 여는 로직을 함수로 만들어 놓아야하는데, 그러한 함수를 모델 별로 묶어 놓은것이 서비스이다.
  • 서비스에는 UserService, CategoryService, PostService, CommentService 등과 같이 있으며 공통적인 루틴이 있다.

Libraries

model_house