rivantsov / vita

VITA Application Framework
MIT License
59 stars 15 forks source link

Plan to restructure the source solution, trim some fat, remove Web projects and old modules #233

Closed rivantsov closed 5 months ago

rivantsov commented 6 months ago

Hi Just heads up, early sharing - I am planning some restructuring of the solution. This will mainly concern extra packages; while the main Vita package and drivers should not be affected.

First, I plan to drop Vita.Web project/package and all Web/WebApi stuff. In the past, I think it was useful, as it provided some guidance and sample code to use Vita under Asp.NET and AspNetCore. But lately, it makes less and less sense. It is quite difficult to follow up the changes in ASP.NET stack - they change it a lot, and many pieces now look outdated (like Jwt stuff). The platform keeps moving and changing, there are more well documented packages for different aspects of web apps (security, authentication, logging etc), with sample code, videos on YouTube etc. So I feel like Vita.Web is no longer needed. The specifics of each app play a big role, so it is very different in many real world cases and Vita.Web one-fits-all code does not work. And it is hard to maintain, test etc. Thus I plan to remove this project and Web tests and to deprecate the package.

Additionally, we have the cloud and 3d party offerings like authentication (Azure AD/Entra or 3d party like Okta etc) or logging (Azure AppInsights, Splunk, dataDogs etc). So today the recommended, default approaches and implementations are different from 10 years ago. Today I do NOT recommend to implement Login in-app, with logins/password hashes stored in your database, but to use external integrated authentication services. Same with logging etc. 10 years ago things were different, there was no rich battle-tested ecosystem, we were implementing all stuff ourselves, sometimes incorrectly and faulty (password hashing!), so providing a reusable Login module made sense (covering all this 2nd factor and password reset annoying crap). Now it's better NOT to do it in-app but to rely on external service. So I plan to remove all Modules that are part of the source solution, and deprecate the packages on Nuget. If you still use these, just grab the source code and include it in your code base.

I also want to clean up tools and testing space, maybe move TestRunner to a separate package/project.

However, the GraphQL-related code will probably stay. I am working on some advanced concept in NGraphQL: 'One-mutation' library that will greatly simplify the updates from the client thru GraphQL. For ORM stuff, it would need some specific integration, which will likely be here, in Vita repo - will be added soon. But we'll see.

This is the plan for the next release. On core tech side, I will try to address pending issues (like expressions in GroupBy) and finally get to Async execution API, this is badly overdue, sorry for this. This would require some serious refactoring, but I will try my best not to break old stuff, and to provide an easy path to the async world.

Just FYI - I am still an active user of VITA, eating my dogfood as they say, I have a real world web app in the cloud, quite big and complex, that runs on Vita and NGraphQL. And on Blazor - if you haven't tried it yet - I highly recommend to do so now! The app runs with MS SQL Server locally (simpler for .net/windows dev) and on Postgres in the cloud (cheaper and honestly, better - Postgres is the winner in DB race I think). So I do test multi-platform aspect every day, and rely on Vita ORM, so I will be advancing it in years to come.

What do you think? if anybody has problem with it, please scream now, or forever hold your silence :)

Roman

jasonlaw commented 6 months ago

Hi @rivantsov ,

Will the Vita.Web being maintained by a separate package or we have to adopt it by ourselves manually with a local copy? Also, for now, the NGraphQL will pass me the OperationContext through the VitaOperationContext attribute, will that remain?

Thank You.

rubenalves commented 6 months ago

Ok, @rivantsov time to start changing the authentication part of my solution and finish the new encryption part also.

Continue the good work.

rivantsov commented 6 months ago

@jasonlaw , Vita.Web sources will be removed from Vita repo, the packages on nuget.org will be marked as deprecated. Feel free to copy the code into your solution and use it from there. With NGraphql and OpContext - likely things will remain the same

rubenalves commented 5 months ago

I have changed my application to use a custom authentication and removed all the code from the Legacy module of VITA. It is a lot better now :)

Continue eh good work.

Thanks.