树形结构菜单,节点显示问题

csbean4004 2013-09-30 04:19:49
需求:
不显示没有记录的菜单节点。
子节点无记录,子节点隐藏。
父节点下的子节点,孙节点都没有记录,父节点和子、孙节点都隐藏。

解决这个问题,可以从两个方向考虑
1.调取菜单时
2.向菜单节点写入记录时

第一种如果使用了缓存,性能问题可以控制
第二种给节点加个持久化的状态标记,写入记录时,设置标记,我这里想到一个思路,采用第二种,这样在写入记录时设置了一个规则:“插入删除记录时,必须设置所属菜单的状态”
代码如下:
public interface IMenu1
{
int Add<Menu1>(Menu1 t);
}

public abstract class BaseMenu
{
public int Add<T>(T t)
{
var result = this.Insert<T>(t);
//设置父节点为显示
//T是记录对象,这里只能考虑用反射对应 T 的 父节点对象,或者每个抽象类只对应一个同类型的派生类
return result;
}
protected abstract int Insert<T>(T t);
}

public class Menu1 : BaseMenu, IMenu1
{
protected override int Insert<T>(T t)
{
//调用仓储写入记录
return 0;
}
}

欢迎大家提意见了
...全文
544 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
csbean4004 2013-11-14
  • 打赏
  • 举报
回复
这里是这样的 比如有个新闻类型 “热门新闻” 类下会录入N条新闻 在菜单中是否显示 “热门新闻”,需要判断此类别下是否有记录。 如果在前端查询类别是否有记录的话,每次展开菜单都需要查询一次是否有记录 如果在树形菜单上,节点是很多的并且每个节点都需要查询是否有记录,那么每次展开菜单,对数据库压力很大 至于权限,照常使用就可以,一楼我写的代码,只是把查询是否有记录的工作,转移到了录入数据时而已
极限战略 2013-10-28
  • 打赏
  • 举报
回复
引用 1 楼 Iovswety 的回复:
这样的方案当然没有问题,不过我觉得这样使业务变复杂了。可能会有这些缺点: 1、如果用户要求上线的时候初始化数据,数据量多的时候,页面直接操作浪费时间,写脚本导入又比较麻烦。 2、对于新增删除增加了对冗余字段的要求,后续人员维护多多少少会增加成本。 3、功能、业务都不复杂,如果该需求是稳定,不会经常变化的,何必搞得又是接口又是抽象类呢?还需要反射??个人不喜欢为了技术而技术。 4、菜单一般都与用户权限相关,这样的设计,难与权限关联。 我建议数据库保存基本数据,web端直接获取基本数据,再在web的bll中遍历数据源决定菜单的生成。
+1 我做过这样的权限管理模块 这个其实一点难度都没有。关键就是用固定步长区分节点等级
Iovswety 2013-10-03
  • 打赏
  • 举报
回复
这样的方案当然没有问题,不过我觉得这样使业务变复杂了。可能会有这些缺点: 1、如果用户要求上线的时候初始化数据,数据量多的时候,页面直接操作浪费时间,写脚本导入又比较麻烦。 2、对于新增删除增加了对冗余字段的要求,后续人员维护多多少少会增加成本。 3、功能、业务都不复杂,如果该需求是稳定,不会经常变化的,何必搞得又是接口又是抽象类呢?还需要反射??个人不喜欢为了技术而技术。 4、菜单一般都与用户权限相关,这样的设计,难与权限关联。 我建议数据库保存基本数据,web端直接获取基本数据,再在web的bll中遍历数据源决定菜单的生成。

13,190

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 分析与设计
社区管理员
  • 分析与设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧