Pull to refresh

Comments 14

Осталось сделать последний шаг — выкинуть редукс:


class User extends Model {

    @field id : string
    @field name : string
    @field email : string
    @field friends : User[]

    @action addFriend( friend : User ) {

        const json = Fetch.json( `/users/${ this.id }` , { body : friend.id } ) as string[]

        this.friends = json.map( id => User.byId[ id ] )

    }

    static byId : Record< string , User > = Registry({ get : ( id : string ) => {

        const json = Fetch.json( `/users/${ id }` ) as {
            name : string
            email : string
            friends : string[]
        }

        return User.make({
            id ,
            name : json.name ,
            email : json.email ,
            friends : json.friends.map( id => User.byId[ id ] ) ,
        })

    } })

}

Вот это поворот
const Model = $mol_object
const Registry = $mol_atom2_dict
const Fetch = $mol_fetch
const field = $mol_atom2_field
const action = $mol_fiber_method    

И ещё выкинуть Model, добавив декораторы observable ;) Получим MobX, да?

Model даёт удобный статический метод make.

Так же она даёт сильную связанность. Причём захватывает единственную связь такого рода (мы же о языках без множественного наследования), вынуждая более естественные для предметной области наследования выражать композицией или ещё чем.

Так же она даёт сильную связанность.

Ну и что?


Причём захватывает единственную связь такого рода

Не захватывает. Наследуйтесь от чего хотите.

Ну и что?

Изменения в Model (инфраструктуре) отразятся на всю или почти всю бизнес-логику.


Не захватывает. Наследуйтесь от чего хотите.

Зачем тогда от него наследоваться вообще? Ни от чего не хочу — будет работать?

Изменения в Model (инфраструктуре) отразятся на всю или почти всю бизнес-логику.

Как любое другое изменение интерфейса. И что?


Зачем тогда от него наследоваться вообще?

Чтобы не плодить бойлерплейт.


Ни от чего не хочу — будет работать?

Разумеется. Просто будете писать больше кода.

Магия IDE не поможет
— используйте typescript и все вам поможет
Я не считаю его «серебряной пулей», это просто стейт-менеджер, который обладает рядом как преимуществ так и недостатков. Не вижу ничего зазорного в том, чтоб попытаться избавиться от недостатков, сохранив преимущества.

Я в чём преимущества и перед чем?

Тема пережевана много раз, поддерживать этот холивар не хочется =)
Sign up to leave a comment.

Articles