refactoring - move to DDD and MVVM