我已经熟悉使用域名创建唯一包名(即包com.stackoverflow.widgets)的标准Java包命名约定.但是,我从未见过有关如何为个人项目选择包名的任何建议.我想因为这是因为这真的是个人品味的问题.
那么,你如何选择永远不会投入生产的个人项目的包名(你可能在业余时间尝试新的框架).假设您没有可以用来创建包结构的个人网站,那么您(或将要)做什么?你有一个逻辑系统来为业余爱好项目生成新的包名,或者你只是使用简单的丢弃包名称mypackage?
由于我只是想知道不同人的想法是什么,我已经把它变成了一个社区维基.
就我个人而言,我从来没有多想过,但我想今晚和Wicket一起玩,我想到我不清楚我是如何组织自己的爱好项目的.对于业余爱好项目(在我看来,至少),一个单独的,独特的包命名约定将成为保持个人和工作相关代码明显彼此分离的好方法.
我正在考虑一个简单的分层命名约定,以便将我的个人项目的源保存在单个根文件夹中:
myprojects作为根文件夹所以,我的Wicket项目将在包中myprojects.learningwicket,单元测试将在包中myprojects.learningwicket.tests(例如).
我被要求进行代码审查并报告在我们的新产品中添加新功能的可行性,这是我迄今尚未亲自处理过的新产品.我知道很容易挑选别人的代码,但我会说它的形状很糟糕(尽量尽可能客观).我的代码审查中的一些亮点:
滥用线程: QueueUserWorkItem和线程一般使用很多,而线程池代表有无信息的名称,如PoolStart和PoolStart2.线程之间也缺乏适当的同步,特别是访问除UI线程之外的线程上的UI对象.
幻数和魔术字符串:代码中定义了一些Const和Enum它们,但是大部分代码都依赖于字面值.
全局变量:许多变量被声明为全局变量,可能会也可能不会被初始化,具体取决于所遵循的代码路径以及发生的顺序.当代码也在线程之间跳转时,这会变得非常混乱.
编译器警告:主解决方案文件包含500多个警告,总数不为我所知.我从Visual Studio收到警告,它无法再显示警告.
半完成的课程:代码已经处理并添加到这里和那里,我认为这导致人们忘记了之前所做的事情,所以有一些看似半完成的类和空的存根.
未在此处发明:该产品复制了其他产品使用的公共库中已存在的功能,例如数据访问助手,错误记录助手和用户界面助手.
关注点分离:当我们阅读有关典型的"UI - >业务层 - >数据访问层"3层架构时,我认为有人正在颠覆这本书.在此代码库中,UI层直接访问数据库,因为业务层部分实现但由于未充分充实而被忽略,并且数据访问层控制UI层.大多数低级数据库和网络方法都在对主窗体的全局引用上运行,并直接显示,隐藏和修改窗体.在实际使用相当薄的业务层的情况下,它也倾向于直接控制UI.大多数这种低级代码也使用MessageBox.Show发生异常时显示错误消息,并且大多数吞下原始异常.这当然使得在尝试重构之前开始编写单元测试来验证程序的功能有点复杂.
我只是在这里表面上看,但我的问题很简单:花时间重构现有的代码库,一次关注一个问题,或者你会考虑从头开始重写整个事情是否更有意义?
编辑:为了澄清一点,我们确实有项目的原始要求,这就是为什么重新开始可能是一个选项.另一种表达我的问题的方法是:代码能否达到维持成本的成本大于倾销和重新开始的成本?
我们正在为学校编写记录管理产品,其中一项要求是能够管理课程安排.我没有看过我们如何处理这个问题的代码(我现在正处于一个不同的项目中),但是我开始想知道如何最好地处理这个要求的一个特定部分,即如何处理这个事实每个课程可以在一周中的一天或多天举行,以及如何最好地将这些信息存储在数据库中.为了提供一些上下文,一个简单的Course表可能包含以下列:
Course Example Data
------ ------------
DeptPrefix ;MATH, ENG, CS, ...
Number ;101, 300, 450, ...
Title ;Algebra, Shakespeare, Advanced Data Structures, ...
Description ;...
DaysOfWeek ;Monday, Tuesday-Thursday, ...
StartTime
EndTime
Run Code Online (Sandbox Code Playgroud)
我想知道的是,DaysOfWeek在这个(人为的)例子中处理专栏的最佳方法是什么?我遇到的问题是,这是一个多值领域:也就是说,你可以在一周中的任何一天开设一门课程,并且可以在一天以上的时间内完成相同的课程.我知道某些数据库本身支持多值列,但假设数据库本身不支持它,是否有"最佳实践"来处理这个问题?
到目前为止,我已经提出了以下可能的解决方案,但我想知道是否有人有更好的方法:
这是我头脑中的第一件事(我不确定这是不是一件好事......).在此解决方案中,DaysOfWeek将被定义为一个字节,前7位将用于表示星期几(每天一位).1位表示在一周的相应日期举行了一个班级.
优点:易于实现(应用程序可以处理位操作),适用于任何数据库.
缺点:更难编写使用该DaysOfWeek列的查询(尽管您可以在应用程序级别处理此问题,或者在数据库中创建视图和存储过程以简化此操作),从而破坏关系数据库模型.
这与使用位字段的方法基本相同,但不是处理原始位,而是为一周中的每一天分配一个唯一的字母,该DaysOfWeek列只存储一系列字母,指示课程的持续日期.例如,您可以将每个工作日与单字符代码关联,如下所示:
Weekday Letter
------- ------
Sunday S
Monday M
Tuesday T
Wednesday W
Thursday R
Friday F
Saturday U
Run Code Online (Sandbox Code Playgroud)
在这种情况下,当然举行周一,周二和周五将有具有价值'MTF'的DaysOfWeek,而只有在周三召开班会拥有DaysOfWeek的价值'W'.
优点:更容易处理查询(即您可以使用 …
我不是一个Visual Basic的人,但我的任务是维护一个旧的VB6应用程序.每当我签出一个文件时,编辑器会自动用小写替换一堆大写的变量名.我怎么能阻止这个!?我不想让它们全部改回来,当我试图找出真正的差异时,让这些变化出现在SourceSafe"差异"中是一件痛苦的事.
它也会在定义中自动更改它:Dim C as Control变为Dim c作为Control.Dim X&变成Dim x&.但它不会一直这样做; 例如,从Dim x&下来的三行,有一个Dim Y&,大写,它没有改变.为什么这样对我呢?
我刚刚开始使用Scala,我刚学会了如何使方法成为正确关联(而不是在命令式面向对象语言中常见的更传统的左关联性).
首先,当我cons在Scala中看到列表的示例代码时,我注意到每个示例总是在右侧有List:
println(1 :: List(2, 3, 4))
newList = 42 :: originalList
Run Code Online (Sandbox Code Playgroud)
然而,即使在一遍又一遍地看到这一点之后,我也没有三思而后行,因为我不知道(当时)这::是一种方法List.我只是假设它是一个运算符(再次,在Java中的运算符意义上),并且关联性并不重要.List在示例代码中始终出现在右侧的事实似乎巧合(我认为它可能只是"首选样式").
现在我知道的更好:它必须以这种方式编写,因为它::是正确联想的.
我的问题是,能够定义右关联方法的重点是什么?
这纯粹是出于审美原因,还是在某些情况下,权利关联实际上可以带来某些与左联结相关的好处?
从我(新手)的角度来看,我真的不知道如何
1 :: myList
Run Code Online (Sandbox Code Playgroud)
比任何更好
myList :: 1
Run Code Online (Sandbox Code Playgroud)
但这显然是一个微不足道的例子,我怀疑这是一个公平的比较.
我仍然是Ruby的新手(阅读Pickaxe并花费大部分时间irb),现在我知道可以在Ruby中修补类,我想知道什么时候可以接受这样做,特别是它是否可以接受修补Ruby的基类.例如:我在这里回答了另一个Ruby问题,海报想要知道如何减去小时数DateTime.由于DateTime该类似乎没有提供此功能,我发布了一个答案,可以将这些DateTime和Fixnum类补丁作为可能的解决方案.这是我提交的代码:
require 'date'
# A placeholder class for holding a set number of hours.
# Used so we can know when to change the behavior
# of DateTime#-() by recognizing when hours are explicitly passed in.
class Hours
attr_reader :value
def initialize(value)
@value = value
end
end
# Patch the #-() method to handle subtracting hours
# in addition to what it normally does
class DateTime
alias old_subtract …Run Code Online (Sandbox Code Playgroud) 我试图更好地理解为什么我们的某个数据库更新脚本无法在特定客户站点上正常工作,并将其缩小(我认为)到数据库所有权和角色.
免责声明:我实际上正在等待客户DBA的回复,以便他们可以告诉我们他们最近是否升级了他们的SQL数据库,因此我们可以查看他们的数据库.我认为如果我们的应用程序的数据库登录转换为模式,SQL 2000到SQL 2005的转换可能会混淆我们的脚本,因为我们
dbo在更新脚本中的几个地方引用.
无论如何,我一直试图找到更好的数据库所有权和角色的解释,以及当你没有在T-SQL语句中明确指定所有者时,它如何影响实际分配数据库对象的所有者.例如,我们的更新脚本通常只是CREATE TABLE foo代替CREATE TABLE dbo.foo或其他东西,但我发现了一些明确使用的dbo,这些是导致问题的那些(仅针对这一个客户).
我发现这篇文章(特定于SQL Server 2000),但该页面上的表格令人困惑.它提到db_owner并"拥有数据库"作为用户可以拥有的角色的两种不同的可能性.
例如,该表规定,如果一个用户sam,谁是谁的db_owner作用,运行查询CREATE TABLE [test3](abc int),将所拥有sam.
然后它提到如果另一个sue" 拥有数据库 "(sic)的用户运行相同的查询,它将归其所有dbo.
不会db_owner和"拥有数据库"是一回事吗?该表暗示"在db_owner角色中"和实际上"成为数据库的所有者" 之间存在差异.但是,如果那是真的,那么"拥有数据库"是什么意思,如果它不是作为db_owner角色的成员呢?
如何在visual basic 6中检索字符串数组的最后一个元素?
我正在处理具有多个点的文件名,这些点被分成一个数组,我只想操纵扩展名.以下代码有效,但有一个我想删除的硬编码元素.
Private Sub Form_Load()
Dim aPath() As String
Dim FileName As String
Dim realExt As String
FileName = "A long dotty.file.name.txt"
aPath = Split(FileName, ".")
realExt = aPath(3) ' <-- how to not hardcode?'
MsgBox ("The real extension is: " & realExt)
Unload Me
End Sub
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Apache的CustomLog指令来创建一些自定义日志文件,但无法使其正常工作.以下是我用于自定义日志的配置:
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
CustomLog /var/log/apache2/jb_common common
CustomLog /var/log/apache2/jb_referer referer
Run Code Online (Sandbox Code Playgroud)
Apache在启动时创建这两个自定义日志文件,因此它肯定会看到CustomLog指令,但它从不向这些文件写入任何内容; 但是,access.log正在写入默认访问日志().
有任何想法吗?我在Ubuntu 8.10上运行Apache 2.2.
我正在用C#编写一个微格式解析器,我正在寻找一些重构建议.这可能是我在C#中尝试了一段时间的第一个"真正的"项目(我在日常工作中几乎完全用VB6编程),所以我觉得这个问题可能成为系列中的第一个;-)
让我提供一些关于我到目前为止的背景,以便我的问题(希望)有意义.
现在,我有一个班级,完成MicroformatsParser所有工作.它有一个重载的构造函数,允许你传递System.Uri或string包含一个URI:在构造时,它会在给定的URI下载HTML文档并将其加载到一个HtmlAgilityPack.HtmlDocument容易操作的类中.
基本API就像这样(或者,一旦我完成代码......):
MicroformatsParser mp = new MicroformatsParser("http://microformats.org");
List<HCard> hcards = mp.GetAll<HCard>();
foreach(HCard hcard in hcards)
{
Console.WriteLine("Full Name: {0}", hcard.FullName);
foreach(string email in hcard.EmailAddresses)
Console.WriteLine("E-Mail Address: {0}", email);
}
Run Code Online (Sandbox Code Playgroud)
这里使用泛型是有意的.我从Firefox 3中的Microformats库(以及Ruby mofogem)的方式中获得灵感.这里的想法是解析器执行繁重的工作(在HTML中查找实际的微格式内容),微格式类本身(HCard在上面的示例中)基本上提供了告诉解析器如何处理它找到的数据的模式.
HCard该类的代码应该更清楚(注意这不是一个完整的实现):
[ContainerName("vcard")]
public class HCard
{
[PropertyName("fn")]
public string FullName;
[PropertyName("email")]
public List<string> EmailAddresses;
[PropertyName("adr")]
public List<Address> Addresses;
public HCard()
{
}
}
Run Code Online (Sandbox Code Playgroud)
解析器使用此处的属性来确定如何使用HTML文档中的数据填充类的实例.调用时,解析器执行以下操作GetAll<T>():
T是否具有ContainerName属性(并且它不是空白)sql ×2
vb6 ×2
apache ×1
c# ×1
generics ×1
ide ×1
java ×1
logging ×1
oop ×1
operators ×1
permissions ×1
refactoring ×1
reflection ×1
ruby ×1
scala ×1
sql-server ×1
ubuntu ×1