提交这两个类(以及业务逻辑和数据访问逻辑)以进行代码审查。审稿人笑着看着代码并建议我重新上课。他告诉我做一些研究,不会给我任何线索。我找不到任何错误。 “子菜单”是基类而不是菜单看起来有点尴尬。但我的要求就是这样。 。 。菜单只有两个级别(子子菜单永远不会存在)。他们有什么好玩的?如果有人向我展示改进这些课程的途径,将不胜感激。
[Serializable]
public class Menu: SubMenu
{
private List<SubMenu> _subMenu;
public List<SubMenu> SubMenu
{
get
{
if (_subMenu == null)
_subMenu = new List<SubMenu>();
return _subMenu;
}
set
{
_subMenu = value;
}
}
}
[Serializable]
public class SubMenu
{
public int ID { get; set; }
public string MenuText { get; set; }
public string MenuURL { get; set; }
public string ImageURL { get; set; }
}
答案 0 :(得分:4)
这里最大的问题是谁做了你的评论的专业性 - 你应该要求他们更有建设性和帮助,如果他们仍然坚持如此粗鲁,我会把它带到经理。
那就是说,我对他们在你的设计中看到的东西的猜测是你正在使用继承。你需要继承吗?似乎你可以通过一个Menu类来更好地服务,它包含一个SubMenus列表,没有父子关系或者只是一个MenuItem对象,它可以包含一个自己的列表。
我实际上更喜欢第二种方法,可能是这样的:
[Serializable]
public class MenuItem
{
public MenuItem()
{
MenuItems = new List<MenuItem>();
}
public int ID { get; set; }
public string MenuText { get; set; }
public string MenuURL { get; set; }
public string ImageURL { get; set; }
// I'm not bothering with the code to protect access to the list
// in this example but you might want that too...
public List<MenuItem> MenuItems { get; set; }
}
答案 1 :(得分:4)
你的对象的整体构造是好的,比如懒惰的实例化,虽然正如其他答案所暗示的那样,我认为你的继承有点领先;但这不是问题!
以下是一些建议;尽管只需要1级深度,但我建议实现更多级别的可用性,因为它并不过分困难,并且可以在将来为您节省时间。另外,我们可以在对象中添加几个构造函数,以便在创建新菜单项时更容易。
我已经创建了一个菜单项的概念,这纯粹是一个建议,但希望它有所帮助。以下是一些需要注意的事项。
以及它的外观:
[Serializable]
public class MenuItem
{
public int Id { get; set; }
public string MenuText { get; set; }
public string MenuUrl { get; set; }
public string ImageUrl { get; set; }
public List<MenuItem> Children { get; set; }
public MenuItem(int id, string text, string url)
: this(id, text, url, String.Empty)
{
}
public MenuItem(int id, string text, string url, string imageUrl)
{
this.Id = id;
this.MenuText = text;
this.MenuUrl = url;
this.ImageUrl = imageUrl;
this.Children = new List<MenuItem>();
}
}
答案 2 :(得分:3)
我同意上述评论员的意见。让你的评论者只是笑而不提供任何建设性的建议既粗鲁又适得其反。我的回答是首先从评论者那里“回去并获得专业的建设性建议”。如果这不是即将到来的,那么我担心审稿人看起来像自我,而不是管家和指导和教育的负责人。
答案 3 :(得分:1)
考虑到您的要求,我唯一发现错误的是命名问题:
public List<SubMenu> SubMenu
这是一个集合,它应该是复数。但说真的,没什么可笑的。
现在,如果你回到你的******评论家,请准备好你的论点:
继承PLUS集合是必要的,因为菜单本身就是一个SubMenu,因为菜单有一个Text / Url / Image / ID,并且它有一个子集合在他下面。
解释SubMenu是Menu的基类的要求(实际上并不那么直接)。
我最好的猜测是,它看起来都有点傻,他只是瞥了一眼。
答案 4 :(得分:1)
提交这两个类(以及业务逻辑和数据访问逻辑)以进行代码审查。审稿人笑着看着代码并建议我重新上课。他告诉我做一些研究,不会给我任何线索。
糟糕的评论,让你查找它是没有意义的,特别是如果你真的在你自己的代码中没有看到任何错误。
我找不到任何错误。 “子菜单”是基类而不是菜单看起来有点尴尬。但我的要求就是......菜单只有两个级别(子菜单永远不会存在)。
我没有发现你的实现很有趣,但是天真虽然有像“从不”这样的东西有点搞笑。如果每当有人说某件事情永远不会发生时,我就有一分钱,并且最终确实发生了,那么我现在至少要有15便士。
如果您的要求是菜单只有两个级别,请不要构建代码以扩展该要求。但是,如果您可以选择非常轻松地打开代码以便将来扩展,那么为什么不这样做呢?没有成本,只是受益。在你的情况下,我认为“开放未来的扩展”确实很简单。
他们有什么好玩的?如果有人向我展示改进这些课程的途径,将不胜感激。
这不一定有趣或错误。我会做不同的事情:如果一个菜单可以包含一个菜单,那不是那个组合吗?如果是这样,菜单和子菜单之间有什么区别?子菜单是恰好有父母的菜单,但它应该关心吗?它应该知道吗?它实际上与菜单本身有什么不同的行为吗?
class Menu
+addSubmenu( Menu menu ) : Menu
+addItem( Item item ) : Menu
这可能就是我的尝试。
答案 5 :(得分:1)
审稿人没有帮助或专业。虽然彬彬有礼,但你需要明确这样的评论是毫无意义的。当被问及时,有知识/经验的人有责任分享。
我认为您需要查看重命名类型/属性,例如建议将“MenuItem”作为基类名称的答案更清晰。
继承SubMenu之间的混淆(误导,因为你通常从基类或超类继承,取决于你喜欢的术语和做继承的东西是一个子类)并且有一个属性也称为SubMenu和那个property表示集合而不是单个实例。
查看菜单实现,例如winforms - 它们更容易理解
答案 6 :(得分:0)
我不确定我是否对下面的语句是正确的(如果我错了,请纠正我)但如果一个类继承自基类,派生类是否应该保存其基类的项列表?在什么情况下这可能是有用的(我现在想不到任何东西)。如果我想到,例如,“马”和“动物”:马匹应该列出动物名单吗?听起来有点奇怪..
答案 7 :(得分:0)
您似乎有一个菜单可以包含两种类型的项目
1)'简单菜单项'(Id,Text,url,image)
2)另一个菜单(子菜单)
我知道你只想深入一层,但重新使用通用解决方案实际上可能更简单。
复合设计模式(http://en.wikipedia.org/wiki/Composite_pattern)似乎很合适。
hth,
艾伦。