投稿時間:2022-07-10 04:16:13 RSSフィード2022-07-10 04:00 分まとめ(18件)

カテゴリー等 サイト名等 記事タイトル・トレンドワード等 リンクURL 頻出ワード・要約等/検索ボリューム 登録日
海外TECH MakeUseOf How to Customize Fonts in Windows 11 https://www.makeuseof.com/windows-11-customize-fonts/ default 2022-07-09 18:15:14
海外TECH MakeUseOf How to Make Your Amazon Fire Tablet Look Like Stock Android https://www.makeuseof.com/tag/how-to-make-amazon-fire-tablet-stock-android/ How to Make Your Amazon Fire Tablet Look Like Stock AndroidHave you had enough of Amazon s tweaked version of Android Here s how to make your Amazon Fire tablet look just like stock Android 2022-07-09 18:05:13
海外TECH DEV Community Clean Architecture: Applying with Flutter https://dev.to/rubemfsv/clean-architecture-applying-with-flutter-487b Clean Architecture Applying with FlutterBefore starting to read this text it is recommended to have notions of some basic concepts such as Clean Architecture and SOLID as they make it easier to understand what will be presented This text has two purposes I Show an architectural division of a Flutter application using Clean Architecture II Guide the implementation of new features in this proposed architecture The analyzed code is based on the Clean Architecture approach proposed by Rodrigo Manguinho in his Flutter course His approach is aligned with the original proposal by Robert Martin Architectural DivisionThe first step is to analyze how the division is done android ios lib data cache http models usecases domain entities helpers usecases infra cache http main builders composites decorators factories cache http pages usecases main dart presentation mixins presenters protocols ui assets components helpers mixins pages validation protocols validators requirements bdd specs checklists usecases test data domain infra main mocks presentation ui validation And from there we can make associations with the Clean Architecture theory for an easier understanding of division of responsibilities Next let s take a closer look at the purpose of each file structure Android Contains the files needed to build the application on android systems iOS Contains the files needed to build the application on iOS systems Lib Contains all files needed for the application Data The data folder represents the data layer of the Clean Architecture being dependent on the domain layer Contains the implementations of business rules that are declared in domain Domain Represents the domain layer of the Clean Architecture the innermost layer of the application not having any dependency on any other layer where it contains the business rules Infra This folder contains the implementations referring to the HTTP protocol and the cache it is also the only place where you will have access to external dependencies related to these two items mentioned Main It corresponds to the main layer of the application where the interfaces developed in the UI layer are integrated with the business rules created in the folders that represent the innermost layers of the Clean Architecture All this is due to the use of design patterns such as Factory Method Composite and Builder Presentation This layer is where the data is prepared to be consumed in the UI handling the logic behind the screens UI Contains the components and visual interfaces that are seen in the system this is where the screens are created Validation Where it contains the implementations of the validations used in the fields ex minimum amount of characters required field valid email among others Requirements Contains documented system requirements this folder may or may not have all of the following subfolders it depends a lot on how the team works Bdd specs Contains files written in Gherkin language to describe the expected behavior of the system Checklist It contains the description of the behavior of the pages in order to facilitate during the unit tests to know what to validate and what to expect Usecases It contains the expected behavior of the use cases of the system where it describes the variations of the business rules to facilitate the unit tests and implementation Test It contains all the unit tests of the application each internal folder represents the layer that the tests belong to and the mocks folder contains the mocks used in the tests Implementation GuideAfter understanding the reason for the division and what responsibilities are contained in each folder of the structure a recommended logical sequence for a better implementation performance using this architecture will be described In order to simplify the explanation unit tests will not be described in detail However it is strongly recommended to start with unit tests before development TDD of each step using the requirements to support the scenarios The following demonstration is the creation of the Login flow to log into an application First step Create business rules in the domain layerInside lib domain usecases create authentication dart This file will be an abstract class that will describe the authentication business rule import entities entities dart abstract class Authentication Future lt AccountEntity gt auth AuthenticationParams params class AuthenticationParams final String email final String password AuthenticationParams required this email required this password As we can see it is an abstract class that has an auth method that receives the AuthenticationParams parameters that are declared below email and password and expects to return an AccountEntity asynchronously through the Future AccountEntity is a class created in lib domain entities which represents the token that is returned after authentication to persist the session class AccountEntity final String token AccountEntity required this token Second step Implement the rules in the data layerIn this layer we create the use case to implement the rule created previously in the domain layer but inside lib data usecases The file usually looks like the example below import domain entities entities dart import domain helpers helpers dart import domain usecases usecases dart import http http dart import models models dart class RemoteAuthentication implements Authentication final HttpClient httpClient final String url RemoteAuthentication required this httpClient required this url Future lt AccountEntity gt auth AuthenticationParams params async final body RemoteAuthenticationParams fromDomain params toJson try final hpptResponse await httpClient request url url method post body body return RemoteAccountModel fromJson hpptResponse toEntity on HttpError catch error throw error HttpError unauthorized DomainError invalidCredentials DomainError unexpected class RemoteAuthenticationParams final String email final String password RemoteAuthenticationParams required this email required this password factory RemoteAuthenticationParams fromDomain AuthenticationParams params gt RemoteAuthenticationParams email params email password params password Map toJson gt email email password password As we can see the RemoteAuthentication class implements the Authentication abstract class receiving the HTTP client and the url for the request In the auth method it receives the parameters and calls the RemoteAuthenticationParams fromDomain params factory created below with the purpose of converting what comes in the standard format to the json format to be sent in the HTTP request inside the body After that the request is made and the value returned in httpResponse is stored and this httpResponse is returned in the method inside a model in order to convert the result to the standard format to work entity through RemoteAccountModel fromJson hpptResponse toEntity This factory and model are created in this layer with the purpose of not polluting the domain layer because what happens in the data layer should not influence what happens in the domain layer For the sake of curiosity the implementation of RemoteAccountModel is below It takes an accessToken in json format and converts it to an Entity import domain entities entities dart import http http dart class RemoteAccountModel final String accessToken RemoteAccountModel this accessToken factory RemoteAccountModel fromJson Map json if json containsKey accessToken throw HttpError invalidData return RemoteAccountModel json accessToken AccountEntity toEntity gt AccountEntity token accessToken Third step Implement the screens in the UI layerTo simplify the understanding only code snippets referring to the authentication method call will be presented The Login screen contains more actions and details that go beyond authentication Consider the screen prototype below for easier visualization In lib ui pages you will need at least two files I login page dart which will be the Login page II login presenter dart which will contain the abstract class with the methods and streams that are used on the page and the implementation of this abstract class takes place in the presentation layer The login presenter dart file is similar to the example below import package flutter material dart abstract class LoginPresenter implements Listenable void validateEmail String email void validatePassword String password Future lt void gt auth And the code below is for the Login button class LoginButton extends StatelessWidget override Widget build BuildContext context final presenter Provider of lt LoginPresenter gt context return StreamBuilder lt bool gt stream presenter isFormValidStream builder context snapshot return ElevatedButton onPressed snapshot data true presenter auth null child Text R translations enterButtonText toUpperCase The auth method when clicked on onPressed calls the presenter to do the authentication In this case you are not passing parameters in auth because the parameters are taken from the presenter when interacting with the screen the validateEmail and validatePassword declared above in the page presenter are used We will see more details in the next step Fourth step Implement the UI s abstract presenter class in the presentation layerTo make it easier to work with Streams it is recommended to use the GetX library or any other one of your choice to make it less verbose The choice for GetX is due to its great support and being constantly updated In lib presentation presenters getx login presenter dart is created It is a GetxLoginPresenter class that extends GetxController and implements LoginPresenter Although the example below has Validation and SaveCurrentAccount we will focus only on Authentication import dart async import package get get dart import ui pages login login presenter dart import domain helpers domain error dart import domain usecases usecases dart import protocols protocols dart class GetxLoginPresenter extends GetxController implements LoginPresenter final Validation validation final Authentication authentication final SaveCurrentAccount saveCurrentAccount String email String password GetxLoginPresenter required this validation required this authentication required this saveCurrentAccount void validateEmail String email email email Validation code here void validatePassword String password password password Validation code here Future lt void gt auth async try final account await authentication auth AuthenticationParams email email password password await saveCurrentAccount save account on DomainError catch error Handle errors here In the validateEmail String email and validatePassword String password methods the user s email and password are captured when typing in the Inputs of the Login screen In auth this is where there is a call to the previously implemented authentication method which receives the email and password captured by the previous validates The call authentication auth AuthenticationParams email email password password returns a token as explained earlier is assigned to a variable called account and then cached via saveCurrentAccount save account this point was not explained in this text but it is through it that the user session persists on the device Fifth step Connect all layers for requests to workAfter everything is implemented now just connect all the parts For this the design pattern Factory Method is used Inside lib main factories usecases we create the factory of the use case being implemented In the case of this example it is related to authentication The authentication factory dart is created which returns the RemoteAuthentication that receives as a parameter the factory of the Http Client and the factory that creates the URL The URL of the API you want to request is passed as a parameter along with the factory that creates the URL In the example it is the URL that ends with login import domain usecases usecases dart import data usecases usecases dart import factories dart Authentication makeRemoteAuthentication return RemoteAuthentication httpClient makeHttpAdapter url makeApiUrl login After that in lib main factories pages the folder for the Login factories is created For this explanation we will focus on login page factory dart and login presenter factory dart First the login presenter factory dart is made which is a Widget that returns the GetxLoginPresenter This presenter was created previously and inside it is injecting the authentication factories which was created just above and the validation and saving token in the cache which were not covered in this text but follow the same premises of makeRemoteAuthentication import factories dart import presentation presenters presenters dart import ui pages pages dart LoginPresenter makeGetxLoginPresenter return GetxLoginPresenter authentication makeRemoteAuthentication validation makeLoginValidation saveCurrentAccount makeLocalSaveCurrentAccount Then following the same line of thought the factory of the Login page is made Like the factory of the presenter it s a Widget but in this case it returns the LoginPage with the factory of the presenter created earlier being injected as a parameter import package flutter material dart import ui pages pages dart import factories dart Widget makeLoginPage return LoginPage makeGetxLoginPresenter Sixth step Apply the screen created in the applicationFinally it is necessary to call the Login factory in the application so that it can be accessed by the user In the main dart file located in lib main add the factory page created into the page array getPages In the route is passed the name of the rout in this case it is login and the page which in this case is the pointer to the factory makeLoginPage This logic is used with all other pages The code looks like it is below import package flutter material dart import package flutter services dart import package get get dart import ui components components dart import factories factories dart void main runApp App class App extends StatelessWidget override Widget build BuildContext context SystemChrome setSystemUIOverlayStyle SystemUiOverlayStyle light final routeObserver Get put lt RouteObserver gt RouteObserver lt PageRoute gt return GetMaterialApp title Flutter Clean App debugShowCheckedModeBanner false theme makeAppTheme navigatorObservers routeObserver initialRoute getPages GetPage name login page makeLoginPage transition Transition fadeIn ConclusionAlthough it is a little complex to understand at first and seems a bit redundant abstractions are necessary Various design patterns are applied to ensure code quality and independence facilitating evolution and maintenance Following the development process and understanding why you are doing it in such a way makes code production easier After a while it ends up being done naturally as it has a linear development process I Use case in the domain layer II Use case in the data layer III UI creation IV Creation of logics to call the request in the presentation layer V Creation of factories to integrate all layers into the main layer VI And then the call of the main factory in the application routes so that it is available to the user Despite having many abstracted parts it is recommended to read the code of the hidden parts for a better understanding In this repository from Rodrigo Manguinho s course you can access these abstracted codes ReferencesRodrigo Manguinho MARTIN Robert C Clean Architecture A Craftsman s Guide to Software Structure and Design st ed USA Prentice Hall Press ISBN 2022-07-09 18:45:20
海外TECH CodeProject Latest Articles A Tiger Hash Implementation for C# https://www.codeproject.com/Articles/149061/A-Tiger-Hash-Implementation-for-C hashalgorithm 2022-07-09 18:45:00
ニュース BBC News - Home Boris Johnson resignation: Zahawi and Shapps enter Tory leadership race https://www.bbc.co.uk/news/uk-62109243?at_medium=RSS&at_campaign=KARANGA minister 2022-07-09 18:20:58
ニュース BBC News - Home Sri Lanka: President Rajapaksa to resign after palace stormed https://www.bbc.co.uk/news/world-asia-62108597?at_medium=RSS&at_campaign=KARANGA crisis 2022-07-09 18:28:55
ニュース BBC News - Home Ex-MP Stewart appeals for help finding lost wedding ring https://www.bbc.co.uk/news/uk-england-derbyshire-62108846?at_medium=RSS&at_campaign=KARANGA house 2022-07-09 18:08:53
ニュース BBC News - Home England v India: Tourists win by 49 runs at Edgbaston to clinch series win https://www.bbc.co.uk/sport/cricket/62107731?at_medium=RSS&at_campaign=KARANGA England v India Tourists win by runs at Edgbaston to clinch series winEngland are thrashed by runs in the second Twenty at Edgbaston as India clinch the three match series with a game to spare 2022-07-09 18:13:23
ビジネス ダイヤモンド・オンライン - 新着記事 【ベストセラー会計士が教える】 マネー力を上げられる人と 上げられない人の決定的な差 - 真の「安定」を手に入れるシン・サラリーマン https://diamond.jp/articles/-/305290 2022-07-10 03:50:00
ビジネス ダイヤモンド・オンライン - 新着記事 大事な人が家族の問題で悩んでいるときに、あなたにできる最善のこととは? - 生きづらいがラクになる ゆるメンタル練習帳 https://diamond.jp/articles/-/305712 2022-07-10 03:45:00
ビジネス ダイヤモンド・オンライン - 新着記事 「【本日は甲子の日+大安吉日! なのに…】 “1万円を1億円にできない人”のワースト5大習慣 新発表!【ワースト2位】 億万長者になる人、すっからかんになる人のシンプルな分岐点とは? - 13歳からの億万長者入門 https://diamond.jp/articles/-/304570 「【本日は甲子の日大安吉日なのに…】“万円を億円にできない人のワースト大習慣新発表【ワースト位】億万長者になる人、すっからかんになる人のシンプルな分岐点とは歳からの億万長者入門ついに万部突破大反響刷読まなきゃソン「億万長者マインドセットが手に入る最良の書」「高校での資産形成、投資の授業にぴったり」と絶賛されている全米ロングセラー初上陸日本人だけが知らないつの力本書の翻訳者であり「朝日新聞beフロントランナー」に取り上げられた関美和氏は、長らく外資系金融業界の最前線にいた。 2022-07-10 03:40:00
ビジネス ダイヤモンド・オンライン - 新着記事 【時間効率4倍アップ】時間の使い方が変われば、勉強の仕方が劇的に変わる! - 1分間瞬読ドリル https://diamond.jp/articles/-/306200 2022-07-10 03:35:00
ビジネス ダイヤモンド・オンライン - 新着記事 【出口学長・特別講義】 「大乗仏教」を読み解く最強の本を紹介しよう。 - 哲学と宗教全史 https://diamond.jp/articles/-/304479 2022-07-10 03:30:00
ビジネス ダイヤモンド・オンライン - 新着記事 【本日は甲子の日+大安吉日!】 2枚一緒に見るだけで、突然、ツキまくる! 《天照大御神》×《造化三神》=悩みがちっぽけになる!ダブル強運貯金の新・方程式 - 1日1分見るだけで願いが叶う!ふくふく開運絵馬 https://diamond.jp/articles/-/304595 【本日は甲子の日大安吉日】枚一緒に見るだけで、突然、ツキまくる《天照大御神》×《造化三神》悩みがちっぽけになるダブル強運貯金の新・方程式日分見るだけで願いが叶うふくふく開運絵馬見るだけで「癒された」「ホッとした」「本当にいいことが起こった」と話題沸騰刷Amazon・楽天位。 2022-07-10 03:25:00
ビジネス ダイヤモンド・オンライン - 新着記事 【マンガでわかるゲーム理論】カリフォルニア大学バークレー校准教授が教える「価格競争のしくみ」がわかるすごい理論とは? - 16歳からのはじめてのゲーム理論 https://diamond.jp/articles/-/306055 2022-07-10 03:20:00
ビジネス ダイヤモンド・オンライン - 新着記事 「みんなが言っていることは本当に正しいのか」自分の頭で考えるべき理由 - 起業家の思考法 https://diamond.jp/articles/-/305480 問題解決 2022-07-10 03:15:00
ビジネス ダイヤモンド・オンライン - 新着記事 【東証プライム上場社長&現役マーケッターが解析】 データから「人間感情」を読み取れる人、読み取れない人の決定的な違い - コピーライティング技術大全 https://diamond.jp/articles/-/304976 2022-07-10 03:10:00
ビジネス ダイヤモンド・オンライン - 新着記事 つみたてNISAは、積立額の変更や、休止も可能 - 最新版つみたてNISAはこの9本から選びなさい https://diamond.jp/articles/-/305787 2022-07-10 03:05:00

コメント

このブログの人気の投稿

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2020-12-01 09:41:49 RSSフィード2020-12-01 09:00 分まとめ(69件)