我注意到,与我倾向于在线阅读的代码相比,我的课程往往更大/更长。以下代码仅作为示例,但我对思考方法以及如何解决问题更感兴趣。
正如您将看到该类处理许多角色,我希望学习如何将其重构为其他类和示例(如果可能),以实际解决方案。关于如何解决这个问题的书籍/指南的链接会很棒。
所以我有一个带有以下声明的Backend类。我正在使用C#,但我认为我的问题涵盖了其他语言。
public static class Backend {
//These classes are the equivalent classes of a cloud database tables
//Using them to map the tables to objects in my app
public class User{}
public class Place{}
public class SubPriority{}
public class Question{}
public class Parent{}
public class Response{}
public class SubParent{}
//initialize the local and cloud databases
public static async void init();
//Add place to local database
public static string AddPlace(string name, string buildingType)
//Retrieve places from local database
public static List<Place> RetrievePlaces()
//Delete a place from local database
public static bool DeletePlace(string placeID)
public static string AddSubPriority(String name)
public static List<SubPriority> RetrieveSubPriorities()
public static bool DeleteSubPriority(string placeID, int ID)
//Sync local db with cloud
public static async Task<bool> SyncWithCloud()
//Download SubParents from the cloud
public static async Task<List<SubParent>> DownloadSubParents()
//Retrieve SubParents from local
public static List<SubParent> RetrieveSubParents(int parentid)
...
...
...
//Similar methods for parents and questions
//Handling login
public static async Task<bool> Login(string userName, string pass)
static async Task<bool> LoginOnline(string userName, string pass)
static bool LoginOffline(string userName, string pass)
//Check for internet connectivity
static async Task<bool> isConnectedToInternet()
static bool InternetAvailable()
}
答案 0 :(得分:0)
将所有这些逻辑保留在一个类中的困难在于改变一件事可能需要对整个类进行重大更改,这将产生错误。同样重要的是,当课程担任单一角色时,阅读和理解更容易。可读的代码总是有更少的错误(根据我的经验)。
您的单个班级至少处理以下角色:
如果我实现这一点,我会将1-4分为不同的类。对于#5,我将模型移到Backend之外,因此它们是独立的类。
将云服务器数据转换为模型类对象 这可以在DAL中或在中间层中完成。要下载云数据,您可以将方法添加到集合类中,如
LocalDatabase.Users.Update(列出<User
&gt; usersFromCloud){}
我做的其他事情
使用非静态类。如果要使用一个全局对象来提供对后端的访问,则可以使用单例。 (Google&#34; C#singleton&#34;例如。)。这样可以更轻松地测试代码(通过交换存储在单例中的内容,例如使用从文本文件返回值的虚拟实现),如果有必要,可以更轻松地切换到非全局实现。