Can you please share how to analyse dev pods aswell?
@tarun870Ай бұрын
Why can't we just have single source i.e from Storage... instead of 2 data source? The app takes data only from there and once data is available the storage data is updated?
@ivansolohub70785 ай бұрын
:(
@bobweiram63216 ай бұрын
This isn't a very good example. It's too open ended. The customer class doesn't have an implementation making it difficult to decide which services are required. Regardless, the Customer class has too many responsibilities and would be better refactored further up the call hierarchy. For instance, the customer could be passed a context with the necessary data it requires.
@khongduocbocuoc6 ай бұрын
That's not a good practice to pre-check internet connection because there's no reliable way to do that. From Apple: "Always attempt to make a connection. Do not attempt to guess whether network service is available, and do not cache that determination."
@seanLee-sk2mi7 ай бұрын
is any iOS developer still alive? Not many.
@BookerGoodwin6 ай бұрын
I develop iOS for Cisco.
@srbalan19957 ай бұрын
Thank you. This is very helpful. Can you help to add the ruby script in my pre-commit hooks ?
@banatibor837 ай бұрын
If I have 2 weeks to do something and I have to work on messy code, I spend the first week refactoring. So I can easily fit the new stuff into the system in an easily testable way.
@lepidoptera93377 ай бұрын
If you are refactoring messy code you are almost guaranteed to break something.
@count7ero8 ай бұрын
you are crooks selling development hours
@FloatingSunfish9 ай бұрын
I'm a simple man. I see Uncle Bob, I click.
@kumarutsav610310 ай бұрын
Lots of if else , no use of proper design pattern. They should better learn and upgrade themselves first.
@VladimirMinkin10 ай бұрын
You do refactoring only after tests cover all functionality.
@hong068310 ай бұрын
thank you~
@pc_enthusiast Жыл бұрын
Is anyone else having a bad time understanding Indian accent?
@RohitPatil_Tech Жыл бұрын
The podcast is super insightful. Thank you for conducting it Alex!🙂
@kav04 Жыл бұрын
Hard to listen to them . They have so bad English.
@arjunaacharya6697 Жыл бұрын
Hi, Thanks for the great video. One thing I wanted to check is that why can't we use NSURLCache here. It would be helpful even incase of pagination as it will just cache the api response against the URL and don't need to write any extra code for this. Is there any issue with that?
@davepoirier804 Жыл бұрын
In the example you used with a viewController refreshing the view when the viewModel changes, absolutely the didSet was the proper way to go. However the root issue here is treating a ViewModel as just a struct with no logic. The reason for MVVM to be created was to move most of the logic typically found in a Massive View Controller outside of the view controller and into a ViewModel. A class dedicated to handling the logic and the update of the view.
@DeyaEldeen1 Жыл бұрын
thanks, nice one.
@bohdanprotas Жыл бұрын
perfect, thanks for the content
@Admal1 Жыл бұрын
Next week I am starting to work on a new iOS project in Russia and they using RIBs, so I started to learn about it. You guys did great explanations, very appreciate this and I found that the main idea of RIBs is really interesting.
@InsideiOSDev Жыл бұрын
That’s awesome! Check out this video course I made about ribs too alexbush.podia.com/ribs-architecture-on-ios It’s free but unfortunately unfinished. Hope it helps even more.
@roh9934 Жыл бұрын
great video, really appreciate it. BTW guys, can you please consider making part 2 of this video with additional 5-10 tips. PS: Paula naming the tip number with such enthusiasm adds another dimension to this video. 😂
@stefanliu9470 Жыл бұрын
Nice video to explain Mediator design pattern!
@clarissasasasa Жыл бұрын
Great video!! Thanks for the info!
@InsideiOSDev Жыл бұрын
Checkout the implementation code on Github - github.com/Inside-iOS-Dev/AppDelegateMediator
@abdallashawkyabdo2721 Жыл бұрын
Thank you a lot for this valuable idea i really see massive AppDelegates in many projects, so i'll try to implement this soon :)
@alirezaaj1957 Жыл бұрын
Great Conversation, Thanks guys.
@narjesabbaspour4695 Жыл бұрын
I just don’t get the part : for showing Pythm app we have to use delegate to get to appdelegate, why? Cant we just call “can open url”?
@InsideiOSDev Жыл бұрын
we can but that would be breaking single responsibility principle and utilizing an anti-pattern - singleton. Every "module" of your app, in our case viewmodel/viewcontroller combination, is responsible for one part of the app, i.e. screen. App delegate is the place we forced to use to receive incoming deeplink requests therefor it is natural to extend it to also route to other deeplinks/apps thus being consistent with its single responsibility. It can also keep track of context and relevant data for outgoing Paytm request in order to properly process future incoming request from it back into our app. If we call open url from another viewmodel/viewcontroller module in our app we lose track of that. It's a lot of boilerplate, unfortunately, but this approach likely will illuminate a whole set of bugs, issues, and inconsistencies you might have if you open url directly. There is an alternative approach, that I haven't thought of on our call, with having some sort of a manager/handler be a dependency of module that wants to communicate with Paytm. Potentially we can have AppDelegate broadcast any incoming deeplinks and data passed with them as a stream that the handler/manager subscribes to. Then when a specific module wants to open a deeplink and wait for a response from it it can just call openUrl but than sit and wait for the handler to "get a response"/i.e. to get a broadcast message from AppDelegate deeplinks stream. All of this is due to the nature of how UIKit was built and app delegate being the sole receiver of incoming deeplinks. We want to preserve single responsibility principle throughout our architecture as much as possible to make it more manageable, testable, and reusable.
@FelipeBorges-ys1pl3 ай бұрын
@@InsideiOSDev singleton being an anti-pattern is highly arguable
@iJigarThakkar Жыл бұрын
Really Awesome
@chrisaguilera1767 Жыл бұрын
Hi Alex, thanks for sharing this and the related podcast; it has been super helpful and I'd like to apply it for a similar use case to the form example you shared. Say there is a model that is build over some period of time. Some of the information is returned from the server (e.g., the ID) and other information is populated from user input in a form. Before the user has competed filling the form and the final model object is built, does it make sense for the builder object to be the "source of truth" for the values displayed in the UI? For example, some view model uses the builder object to get the value of each model attribute, so that it can determine the string that should be displayed for that field in the form.
@InsideiOSDev Жыл бұрын
it does. this is a great use case for it! your relationship of objects is basically something like this in that case: UI/view/viewcontroller -> viewmodel -> builder object
@InsideiOSDev Жыл бұрын
you can even have multiple VMs use the same builder as a source of truth if needed. The builder essentially plays a role of collecting data over time, validating the input, assembling the model, being the source of truth.
@vamsi38772 жыл бұрын
Thanks 👏
@arjunaacharya66972 жыл бұрын
How to pass the input parameters required to create the dependencies if it is required. Do we need to pass it as arguments to factory class?
@InsideiOSDev2 жыл бұрын
That’s one option. Or you can pass them as params to the make method. Typically the rule of thumb is to pass other dependency objects with behavior via the constructor/initializer and data dependencies via the method params. The idea is that things that change less and are less dynamic will be set in the initializer and more dynamic things like user input that happened during runtime will be passed via the method params.
@riddik182 жыл бұрын
please show me how to generate mocks with generic methods
@JunaidKhan-ny8tu2 жыл бұрын
Waiting for more 🙋♂️
@InsideiOSDev2 жыл бұрын
here is more kzbin.info/www/bejne/nH7UnJlnl8dlac0
@Fogmeister2 жыл бұрын
It sounds very much like the same kind of architectural approach as TCA.
@AlexBushV2 жыл бұрын
never heard of it. are there are links to check out to read about it?
@user-yd9xy3rb4x2 жыл бұрын
There are a lot of examples in a variety of languages including Swift on the website.
@user-yd9xy3rb4x2 жыл бұрын
Yeah the website is pretty good.
@tokero51992 жыл бұрын
I really dislike when people talk about architectural patterns like MV* , VIP or RIB as they are THE architecture of the app, I dislike even more when people claim that one self acclaimed architecture is superior to others.
@InsideiOSDev2 жыл бұрын
Can you explain why you dislike it and how is RIBs not superior to every other mobile architecture out there?
@tokero51992 жыл бұрын
@@InsideiOSDev I never heard about RIB before this video and I do not dislike RIB. I dislike looking at architecture as just applying some "one size fits all" pattern. All projects are different and no single architecture will be the best for all of them. Also thinking that architecture is something you can describe with an acronym just seem very naive to me, I honestly do not know any other developers than mobile developers who thinks of architecture as something you can simply solve by applying a pattern. I did like the video though.
@ashim442 жыл бұрын
Wow this is really nice topic. Would like to hear more on how swift ui works with rib architecture.
@DavidNorman12 жыл бұрын
I’m looking forward to part 2 thanks guys
@InsideiOSDev2 жыл бұрын
here it is kzbin.info/www/bejne/hoWai6aYoZp6bbc
@InsideiOSDev2 жыл бұрын
Related useful video about VIPER architecture: kzbin.info/www/bejne/e5nWo4Zsq8-omtU
@urmilsetia23892 жыл бұрын
Cool. And extension could be extended to cover for sequences.
@dmitrysamoylenko67752 жыл бұрын
Backend for mobile dev is a killer question. I don't have experience with this
@InsideiOSDev2 жыл бұрын
yea, it's a tough one for mobile folks. I recommend looking into www.thoughtworks.com/en-us/insights/blog/bff-soundcloud samnewman.io/patterns/architectural/bff/ medium.com/tech-tajawal/backend-for-frontend-using-graphql-under-microservices-5b63bbfcd7d9 and martinfowler.com/articles/micro-frontends.html It will help you build better mobile apps as you'll have an appreciation of what's going in the backend and will just in general make you a more well rounded engineer.
@dmitrysamoylenko67752 жыл бұрын
@@InsideiOSDev thanks very much
@PlainTrane2 жыл бұрын
Hi Alex, Why not use Swift's nil coalescing operator instead? e.g. let param2 = param2 ?? "" It avoids the if-let/else, the extra variable, and the extension.
@InsideiOSDev2 жыл бұрын
yep! this extension is just a "nicety" for readability as you can chain things together with it such as: if someString.orEmpty().isEmpty where if you do coalescing operator you'd have to reserve to: if (someString ?? "").isEmpty neither is better or worse, just your own preference of readability. The idea for this extension method comes from Kotlin kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/is-null-or-empty.html
@PlainTrane2 жыл бұрын
@@InsideiOSDev Hi Alex. Please pardon the delay getting back to you. Things have been busy, and good, here. The conventional Swift expression of isNilOrEmpty is someString?.isEmpty ?? truecertainly readability in some cases, it would help educate beginning Swift developers on Swift core language features as well as showing the value of extensions. But starting with a C-style if/else (Swift certainly can use if/else, but in this scenario it's an odd use), the beginning developer misses out on the opportunity to learn a core language feature and comes out with an idea that may lead to some odd code just because they don't understand part of the language, which is unfortunate. I hope this helps as you formulate your content and wish you the best.
@kennyli32172 жыл бұрын
I'm also an Android engineer, but find the content valuable. If there was some visual illustration to complement with the talk, that would make this extra nice. Anyway, thanks for sharing :)
@InsideiOSDev2 жыл бұрын
there are illustrations and visuals about this in my course iosinterviewguide.com/system-design-interview I'm also starting to make more video episode where I screen share and show code or diagrams. Will be revisiting the topic of system design. Stay tuned.
@byaruhaf2 жыл бұрын
Thanks for the video also nil coalescing operator works well let unwrappedparam2 = param2 ?? ""
@InsideiOSDev2 жыл бұрын
true! this extension is just a "nicety" for readability as you can chain things together with it such as: if someString.orEmpty().isEmpty where if you do coalescing operator you'd have to reserve to: if (someString ?? "").isEmpty neither is better or worse, just your own preference of readability. The idea for this extension method comes from Kotlin kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/is-null-or-empty.html
@Eugene.Berezin2 жыл бұрын
Nice video! A little correction String is a struct not a class. Thank you for the video! It’s very useful!
@hannnah6892 жыл бұрын
thanks for sharing. very useful!
@InsideiOSDev2 жыл бұрын
Glad it was helpful!
@abymathew5753 жыл бұрын
It'll be really great if you can create your video with example videos like this. I've found so many good tutorials on your youtube channel. really good.
@AlexBushV3 жыл бұрын
yea. That's the goal. it takes a lot of time to produce the videos but ultimately I want to switch to that format instead of just the audio.
@InsideiOSDev2 жыл бұрын
here's another video like this! kzbin.info/www/bejne/hZi4pZZ5ftZ_ia8