I think the update() & install() function still share many similar codes. Since we decide to use only --install flag for both installation and update. We’d better put the update logic also in the install() function. How do you think of the following ?
public ApplicationService::Install() {
  CreateAppID_UnpackPackage_LoadApplication();
  If(IsAppInstalled(app_id)) {
   AddApplicationInStorage();
  } else {
    UpdateApplicationInStorage();
  }

  RunMainDocumentAndNotifyObserver();
}

private ApplicationService::IsAppInstalled(app_id) {
  return  application_storage_->GetApplicationData(app_id)
      == NULL;
}

private ApplicationService::AddApplicationInStorage() {
  application_storage_->AddApplication();
  InstallPackageOnTizen();
}

private ApplicationService::UpdateApplicationInStorage() {
  Version()->CompareTo();
  UnInstallPackageOnTizen();
  application_storage_->UpdateApplication();
  InstallPackageOnTizen();
}