【发布时间】:2011-12-04 10:17:08
【问题描述】:
所以我的任务是映射两个酒店目录;两者都是 csv 文件。 我根据他们的职责创建了两个类: 1. CatalogManager:处理目录的I/O操作。 2. CatalogMapper:处理两个目录的映射任务。
定义如下:
public static class CatalogManager
{
public static List<Hotel> GetHotels(string filePath) { }
public static void SaveHotels (List<Hotel> hotels, string filePath) { }
public static void SaveMappedHotels (List<MappedHotel> hotels, string filePath) { }
public static List<string> GetHotelChains(string filePath) { }
}
public static class CatalogMapper
{
public static List<MappedHotel> MapCatalogs (List<Hotel> masterCatalog, List<Hotel> targetCatalog) { }
public static FetchAddressGeoCodes (Hotel.Address address)
{ // fetch address's geocode using Google Maps API }
public static string GetRelevantHotelChain (string hotelName)
{
List<string> chains = CatalogManager.GetChains();
// find and return the chain corresponding to hotelName.
}
}
典型的映射操作可能类似于:
List<Hotel> masterCatalog = CatalogManager.GetHotels(masterFilePath);
List<Hotel> targetCatalog = CatalogManager.GetHotels(targetFilePath);
List<MappedHotel> mappedHotels = CatalogMapper.MapHotels(masterCatalog, targetCatalog);
CatalogManager.SaveMappedHotels(mappedHotels, mappedCatalogFilePath);
正如代码所示,这两个类都是静态的。尽管我发现它们是正确的并且可以正常工作,但我仍然觉得这种设计在 OOP 方面存在问题。 这两个类都只是静态的,这很好吗?我发现不需要实例化它们。 此外,这个设计还有哪些其他缺陷?我确信存在缺陷。解决方案是什么?
【问题讨论】:
-
想告诉我们您使用的是哪种语言?请适当地标记问题。
-
听起来Kingdom Of Nouns里有些不安
-
@KerrekSB 这只是我想讨论的类设计;所以语言对我来说似乎并不重要。我还是添加了 C# 标签。
-
@HauntedGhost:有些语言(真正的语言?)没有“静态”类的概念,所以我认为这很重要。我想说你本质上只是在描述一些美化的命名空间。
-
发布的代码很好,它是完成工作的面向任务的过程代码。你选择了优秀的名字,很容易理解发生的事情。您实际上确实有实例对象,Hotel 和 MappedHotel。没有什么需要修复的。
标签: c# oop class-design static-class