initial repository interface and default implementation(DefaultRepository)
Todo: revisit Save function in base.go