Controllers/BasketController:
Use Expression Bodied Members.
Delete() should not be 'fire and forget'
Controllers/HomeController:
Expression bodied constructor
IntegrationEvents/EventHandling/ProductPriceChangedIntegratedEventHandler:
Use valueTask to minimize allocations for 'fast path' tasks. One might
believe that
most users would not have the changing item in the basket at any given
time.
Using ValueTask instead of Task, this minimizes allocations to only when
async
work must actually take place.
IntegrationEvents/EventHandling/ProductPriceChangedIntegratedEvent:
Make the properties ReadOnly
Model/Basket:
Use property initializer
Model/RedisBasketRepository:
Remove redundant ToString()
Use elvis operator instead of statement null check
Startup:
remove redundant ToString()
Controllers/AccountController:
Replace single line methods with expression bodied members.
Includes constructor, C# 7 feature.
Controllers/CatalogController:
Remove unnecessary ToString() call.
Replace single line methods with expression bodied members.
Extensions/HttpClientExtensions:
Replace single line methods with expression bodied members.
Extensions/SessionExtensions:
Replace single line methods with expression bodied members.
Services/BasketService:
Remove unnecessary ToString() calls.
Add ?? to simplify conditional initialization
Use TryGetValue and out variable initialization to simplify Quantity
calculation
Services/CatalogService:
Use Value<T> generic method instead of dynamic types.
There is a lot of overhead for dynamic and it seems overkill here.
Services/IdentityParser:
Use the pattern matching is expression.
Refactor the LINQ queries to enumerate the collection (and create an
enumerator)
only once. The previous code had 3 enumerations.
Services/Utilities/HttpApiClient:
Remove the 'async' modifier and 'await' statements from methods where
the only asynchronous statement is the final statement of the method,
and
the task from the underlying method can be returned.
Services/Utilities/HttpApiClientWrapper:
Use expression bodied members where applicable.
Remove the 'async' modifier and 'await' statements from methods where
the only asynchronous statement is the final statement of the method,
and
the task from the underlying method can be returned.
ViewComponents/Cart:
Use expression bodied members where applicable.
ViewComponents/CartList:
Use expression bodied members where applicable.
Remove the 'async' modifier and 'await' statements from methods where
the only asynchronous statement is the final statement of the method,
and
the task from the underlying method can be returned.
ViewModels/Annotations/CardExpiration:
Use the out variable initializer to simplify the validation of the
card expiration date.
ViewModels/Basket:
Use property initializer syntax instead of constructor body
ViewModels/CatalogViewModels/IndexViewModel:
Use expression bodied property to return the calculated 'Disabled'
property
ViewModels/Order:
Use property initializer syntax.