1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/archermind-ti-viabus-architecture

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

ViaBus

⭐ ViaBus — это архитектура с реактивной структурой, которая позволяет полностью разделить пользовательский интерфейс и бизнес-логику за счёт пересылки данных через шину.

overview

Почему стоит выбрать ViaBus

  • Можно быстро разобраться в структуре и использовании ViaBus. 💡
  • Легко интегрировать в существующий проект, просто добавив. 🔥
  • Позволяет постепенно рефакторить код по 1 часу в день. 💧
  • Четкое разделение обязанностей: разработчики UI и бизнес-логики не мешают друг другу. 🌱
  • Нативная реализация двусторонней связи между компонентами и способностями. ⚡
  • Компоненты, написанные на основе ViaBus, можно использовать в любом проекте без необходимости компиляции. 🌎
  • Меньше дублирования кода, более плоская модель взаимодействия, повышение коэффициента повторного использования кода до 100%. 💪

Интеграция

Метод 1: использование har-пакета
Создайте har-пакет с помощью library, добавьте его в папку libs в каталоге проекта.
В файле gradle в разделе entry добавьте следующий код:
implementation fileTree(dir: 'libs', include: ['*.jar', '*.har'])
Метод 2: зависимость от gradle
allprojects{
    repositories{
        mavenCentral()
    }
}

implementation "com.gitee.archermind-ti:viabus-architecture:1.0.3-beta"
implementation "com.gitee.archermind-ti:viabus-core:1.0.3-beta"

Использование

  1. Определите интерфейс для отправки запросов. Интерфейс должен наследоваться от IRequest:
public interface INoteRequest extends IRequest{

    void queryList();

    void insert(NoteBean bean);

    ...
}
  1. Создайте bus для поддержки доступа к интерфейсу запроса. Bus должен наследоваться от BaseBus:
public class NoteBus extends BaseBus {

    public static INoteRequest note() {
        return (INoteRequest) getRequest(INoteRequest.class);
    }

    ...
}
  1. Зарегистрируйте пользовательский интерфейс как получателя ответа. В пользовательском интерфейсе отправьте данные через bus. В onResult обработайте логику пользовательского интерфейса в зависимости от кода ответа:
public class TodoListSlice extends BaseBusSlice {

    @Override
    public void onStart(Intent intent) {
        ...
        // Регистрация наблюдателя ответа
        NoteBus.registerResponseObserver(this);

        NoteBus.note().queryList();
    }

    @Override
    public void onResultHandle(Result testResult) {
        String resultCode = (String) testResult.getResultCode();
        switch (resultCode) {
            case NoteResultCode.QUERY_LIST:
                if (testResult.getResultObject() != null) {
                    setList((List<NoteBean>) testResult.getResultObject());
                    mAdapter.notifyDataSetItemRangeChanged(0, mList.size());
                }
                break;
            case NoteResultCode.INSERTED:
                if (testResult.getResultObject() != null) {
                    mList.add(0, (NoteBean) testResult.getObject());
                    mAdapter.notifyDataSetItemInserted(0);
                }
                break;
            ...
        }
    }
}
  1. В классе управления модулем зарегистрируйте бизнес-логику как обработчик запросов:
public class MainAbility extends BaseBusAbility{
    @Override
    protected void onStart(Intent intent) {
        ...
        initBusiness();
    }

     private void initBusiness() {
            mNoteBusiness = new NoteBusiness();
            mNoteBusiness.init(MainAbility.this);
            NoteBus.registerRequestHandler(mNoteBusiness);
        }
}
  1. В бизнес-логике асинхронно обрабатывайте различные запросы:
public class NoteBusiness extends BaseBusiness<NoteBus> implements INoteRequest {

    @Override
    public void queryList() {
        handleRequest(new IAsync() {
            @Override
            public Result onExecute(ObservableEmitter<Result> e) throws IOException {
                OrmPredicates query = ormContext.where(NoteBean.class);
                List<NoteBean> list = ormContext.query(query);
                return new Result(NoteResultCode.QUERY_LIST, list);
            }
        });
    }

    @Override
    public void insert(NoteBean bean) {
        handleRequest((e) -> { ... });
    }
    ...
}

Оставшиеся проблемы

На данный момент не реализована проверка разрешений, связанных с USE_SIP и PROCESS_OUTGOING_CALLS, поскольку эти функции не являются основными для библиотеки.

Благодарности

RxJava

Лицензия

Copyright 2018 KunMinX

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/archermind-ti-viabus-architecture.git
git@api.gitlife.ru:oschina-mirror/archermind-ti-viabus-architecture.git
oschina-mirror
archermind-ti-viabus-architecture
archermind-ti-viabus-architecture
master