Используя act-native-device-info , вы можете получить следующие данные (выполненные на симуляторе):
getUniqueID: DB71DCB5-6BB0-497B-BE9E-A02BCC1235B7
getInstanceID: undefined
getDeviceId: x86_64
getManufacturer: Apple
getModel: Simulator
getBrand: Apple
getSystemName: iOS
getSystemVersion: 10.1
getBundleId: org.reactjs.native.example.project
getBuildNumber: 1
getVersion: 1.0
getReadableVersion: 1.0.1
getDeviceName:MacBook Pro
getUserAgent: Mozilla/5.0 (iPhone; CPU iPhone OS 10_1 like Mac OS X) AppleWebKit/602.2.14 (KHTML, like Gecko) Mobile/14B72
getDeviceLocale: en
getDeviceCountry: US
getTimezone: America/Panama
isEmulator: true
isTablet: false
Функциональная декомпозиция - это процесс разбиения сложного процесса на более мелкие и простые части.
Например, подумайте об использовании банкомата. Вы можете разложить этот процесс на:
Подойдите к банкомату
Вставьте свою банковскую карту
Введите свой пин-код
хорошо ... вы поняли.
Вы можете подумать о программировании того же путь. Подумайте о программном обеспечении, в котором запущен банкомат:
Код для чтения карты
Проверка PIN-кода
Обработка передачи
Каждый из которых может быть дополнительно разбит. Когда вы дойдете до наиболее разложенных частей подсистемы, вы можете подумать о том, как начать кодировать эти части. Затем вы составляете из этих маленьких частей большое целое. Ознакомьтесь с этой статьей в Википедии:
Декомпозиция (программирование)
Преимущество функциональной декомпозиции состоит в том, что, начав кодировать, вы работаете с простейшими компонентами, с которыми вы можете работать для своего приложения. Поэтому разработка и тестирование этих компонентов становится намного проще (не говоря уже о том, что вы лучше можете спроектировать свой код и проект в соответствии с вашими потребностями).
Очевидный недостаток - это временные затраты.
Просто быстрый (и надеюсь, полезный) комментарий: когда вам интересно, где разместить проверку, попробуйте притвориться, что скоро вы собираетесь полностью воссоздать свой слой пользовательского интерфейса, используя технологию, которую вы еще не так хорошо знакомы с **. Постарайтесь исключить из этого уровня любую похожую на валидацию бизнес-логику, которую, как вы знаете наверняка, придется переписать в новой технологии.
Вы обнаружите исключения - бизнес-логика, которая, тем не менее, попадает на уровень вашего пользовательского интерфейса, но Тем не менее, это полезное соображение.
** Mobile dev, Silverlight, Voice XML, что угодно - притворившись, что вы не знакомы с технологией своего «нового» уровня пользовательского интерфейса, вы сможете абстрагироваться от своих проблем и меньше увлекаться деталями реализации.
однако есть некоторые распространенные ошибкиВот пример: ваш компилятор C.
Сначала препроцессор: он обрабатывает #include
и #define
и все макросы. Вы даете ему имя файла и некоторые параметры, и он возвращает очень длинную строку. Назовем эту функцию preprocess (filename)
.
Затем есть лексический анализатор. Он берет строку и разбивает ее на токены. Назовите его lex (строка)
. Парсер берет токены и превращает их в дерево, назовем это синтаксическим анализом (токенами)
. Затем есть функция для преобразования дерева в DAG блоков, называемая dag (tree)
. Вызовите эмиттер кода emit (dag)
, который принимает DAG блоков и выводит ассемблер.
Тогда компилятор:
emit(dag(parse(lex(preprocess(filename)))));
Мы разложили большой, сложная для понимания функция (функция compile
) в кучу более мелких, более простых для понимания функций. Вам не обязательно делать это как конвейер, вы можете написать свою программу как:
process_data(parse_input(), parse_config())
Это более типично; компиляторы - довольно глубокие программы, большинство программ для сравнения широки.
Функциональная декомпозиция - это способ разбить сложную проблему на более простые задачи, основанные на задачах, которые необходимо выполнить, а не на взаимосвязях данных. Этот термин обычно ассоциируется со старым процедурно-ориентированным дизайном.
Краткое описание разницы между процедурно-ориентированным и объектно-ориентированным дизайном.