Akita ๐ถ์ ๋ ธ๋ ฅ ์ํ ๊ด๋ฆฌ
๋ณธ ๊ธฐ์ฌ์ ๋ํ์ฌ
Who am I?
jikoshokai.json
{
"name": "ไฝ่คๆๆ๏ผใใใจ๏ผ",
"ไฝใฃใฆใใใฎ": "BtoB SaaS",
"ใใฃใฆใใใจ": ["ใใใฏใจใณใ", "ใใญใณใใจใณใ", "ใคใณใใฉ"],
"่จ่ช": ["Scala", "Typescript", "Python", "Ruby"],
"ในใใใฉ": {
"ใญใฃใฉ": "ใใน",
"ไธ็ๆฆ้ๅ": 2000000
}
}
์ด ๋ฐํ์ ๋ชฉํ
Classi Angular Night
๋ชจ์ฟ ์ง
Akita์์ ๋ง๋จ
๊ทธ๋์ Akita์ ๋๋ค.
์ฝ๋๋ ์ฌ๊ธฐ
Akita๋?
Akita ๊ทธ๋ฆผ
NgRx์์ ๋น๊ต
์ํคํ์ 3๋กค
์คํ ์ด
import { Injectable } from '@angular/core';
import { Store, StoreConfig } from '@datorama/akita';
import { Counter } from './counter';
@Injectable({ providedIn: 'root' })
@StoreConfig({ name: 'counter' })
export class CounterStore extends Store<Counter> {
constructor() {
super({
count: 0
});
}
}
Query
@Injectable({ providedIn: 'root' })
export class CounterQuery extends Query<Counter> {
constructor(protected store: CounterStore) {
super(store);
}
}
์๋น์ค
@Injectable({ providedIn: 'root' })
export class CounterService {
constructor(
private counterStore: CounterStore
) {}
set(countValue: number) {
return this.counterStore.update({ count: countValue });
}
}
Component
export class CounterComponent implements OnInit {
counter$: Observable<Counter>;
constructor(
private counterService: CounterService,
private counterQuery: CounterQuery
) { }
ngOnInit() {
this.counter$ = this.counterQuery.select();
}
increment(current: number) {
this.counterService.set(current + 1);
}
}
์ค์ฌ๋ผ์ด
๊ธฐ๋ณธ์ ์ด๊ฒ๋ฟ ๐
์์ฉํธ
Entity Store
Entity Store
์ฌ๊ธฐ๋ถํฐ ์ค์ ์ฝ๋๋ก ๐ฉ
์ฌ์ฉํด๋ ์ข์๋ ์
์ด๋ ค์ด ์
์ฐธ๊ณ
๊ณ ๋ง์์ ๐
Reference
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(Akita ๐ถ์ ๋ ธ๋ ฅ ์ํ ๊ด๋ฆฌ), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://qiita.com/YuitoSato/items/1bf8b8735c2ec8bfb291ํ ์คํธ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋ฌธ์์ URL์ ์ฐธ์กฐ URL๋ก ๋จ๊ฒจ ๋์ญ์์ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค