这个问题与结构有关:
我有一个Default.aspx页面,它保存对(XML)服务的引用,并处理HTML对象的innerHTML。按钮数量基于服务输出。
由于这是一个冗长而复杂的算法,我想将其封装在另一个类中,将其划分为更小且更易读的代码块。
问题是我不知道最佳选择是什么,我应该将使用过的对象(服务以及HTML项目)的引用复制到新类中吗?
由于物品的安装和来源,它看起来并不像我的优雅选择。 我在互联网上搜索但找不到任何适合这种情况(我认为)的常见情况
这是我想转移到另一个类的功能。目前它在Default.aspx中 并使用rep(ort)Service,defaultPath,path,selectionScreen和Image2对象动态绘制菜单。
''' <summary>
''' Dynamically builds the square menu where the reports can be selected from.
''' It is based on the number of reports available
''' Show list of available reports on reporting server as HyperLinks
''' </summary>
''' <remarks></remarks>
Private Sub BuildReportSelectionArea(Optional path As String = "")
Dim items As CatalogItem() = repService.ListChildren(path, False)
Dim items2 As CatalogItem() = repService.ListChildren(path, False)
'Ensure that folders are shown first
Dim maxFolder = 0
For i = 0 To items.Count - 1 Step 1
If (items(i)).TypeName = "Folder" Then
items(i) = items2(maxFolder)
items(maxFolder) = items2(i)
maxFolder += 1
End If
' Some other code
End Sub
'TODO :Ensure the alfabetical order is preserved
Next
答案 0 :(得分:1)
我首先会对代码进行评论:
这意味着您有2次访问该服务,但第二个数组后来用于&#34;排序&#34; itemItem项目,两次调用服务似乎浪费了资源
Dim items As CatalogItem() = repService.ListChildren(path, False)
Dim items2 As CatalogItem() = repService.ListChildren(path, False)
重新排序可以简单地使用
Dim items As New List(Of CatalogItem)(RepService.ListChildren(path, False))
items.Sort(Function(item1 As CatalogItem, item2 As CatalogItem)
If String.Equals(item1.TypeName, item2.TypeName) Then
Return item1.FileName.CompareTo(item2.FileName)
End If
If item1.TypeName = "Folder" Then
Return -1
End If
Return 1
End Function)
首先按文件夹排序,然后按文件名排序(您可能需要更新一些属性才能匹配)
您可以通过创建模块或接受repService作为属性和路径的共享类来进一步提取,并返回输出代码
虽然创建了一个用户控件/ webpart,所以你可以将这个功能添加到你想要的每个页面,这也是一个非常好的选择,以及重构复杂代码的普遍接受的方式......